LeetCode—605. 种花问题

LeetCode测试真的细致,但是用起来不舒服,要不你把main()写好,要不我自己写嘛

#include <stdio.h>
#include <stdlib.h>
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\n");
    else
    printf("false\n");
    return 0;
}
思路:
 一个序列最前连续俩0特判,第0个置1,中间序列连续三个0,中间0置1,最后连续俩0,后一个0置1。统计答案

原始思路是:较多if—else麻烦

#include <stdio.h>
#include <stdlib.h>
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\n");
    else
    printf("false\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/baidu_36536257/article/details/80269728