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