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;
}