LeetCode—605. 種花問題


LeetCodeテストは本当に細かいですが、使い心地が悪いので、main()を書いてください.自分で書いてください.
#include 
#include 
int canPlaceFlowers(int* A, int size, int n) {
    int i,sum=0,j,t;
    if(size==1)
    {
         if(A[0]==0&&n==1)
         return 1;
    }
   else//size>=2
   {
       if(A[0]==0&&A[1]==0)
       {
           A[0]=1;
           sum++;
       }
       for(i=1;i<=size-3;i++)
       {
           if(A[i]==0&&A[i+1]==0&&A[i+2]==0)
           {
               A[i+1]=1;
               sum++;
           }
       }
       if(A[size-2]==0&&A[size-1]==0)
    {
        A[size-1]=1;
        sum++;
    }
   }
   if(sum>=n)
    return 1;
    else
    return 0;
}
int main()
{
    int A[]={0,1,0};
    int k=canPlaceFlowers(A,3,1);
    if(k==1)
    printf("true
"); else printf("false
"); return 0; }
考え方:
1つのシーケンスは最前に2つの0の特判を連続して、0番目に1を置いて、中間シーケンスは3つの0を連続して、中間0は1を置いて、最後に2つの0を連続して、後の1つの0は1を置きます.答えを集計
原始的な考え方は:if-elseの面倒が多い
#include 
#include 
int canPlaceFlowers(int* A, int size, int n) {
    int i,sum=0,j,t;
    if(size==1)
    {
        if(n==1&&A[0]==0)
        sum++;
        A[0]=1;
    }
    else
    {
        for(i=0;i<=size-2;i++)
        {
            if(A[i+1]==0)
            {
                if(A[i]==0)
                {
                    A[i]=1;
                    sum++;
                }
                i++;
            }
            else
            {
                i=i+2;
            }

        }
        if(A[size-2]==0&&A[size-1]==0)
    {
        A[size-1]=1;
        sum++;
    }
    }
    if(sum>=n)
    return 1;
    else
    return 0;
}
int main()
{
   int B[]={1,0,0,0,1};
    int k=canPlaceFlowers(B,5,1);
    if(k==1)
    printf("true
"); else printf("false
"); return 0; }