今天刷种花问题,大家有兴趣可以点上看看题目要求,试着做一下。
我们直接看题解吧:
审题目+事例+提示:
这里题目和提示有句很关键:
flowerbed数组中不存在相邻的两朵花(开始和最后都不允许有)
思路(”跳格子法“):
While函数遍历
1、index遇到1即有花,直接i+2(即跳一个格)
2、index遇到0即无花,i-1处肯定为0(依题意),直接判断i+1,
·i+1为0,n-1;
·i+1为1,直接i+3(即跳两个格)
3、当n<=0时为true,否则为false
代码(C++):
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
int i = 0;
while (i < flowerbed.size() && 0 < n ) {
if (flowerbed[i] == 1) {
i+=2;
} else if (i == flowerbed.size()- 1 || flowerbed[i+1] == 0) {
n--;
i+=2;
} else {
i+=3;
}
}
return n <= 0;
}
};
虽然其它方法也行,但u1s1,这个方法是真的妙!