解题思路:
直接依照题意,把所有的数表示出来,算取最大值即可,代码如下:
class Solution {
public:
int getMaximumGenerated(int n) {
if(n == 0) {
return 0;
}
vector<int> nums(n + 1);
nums[1] = 1;
for(int i = 2; i <= n; i ++) {
if(i % 2 == 0) {
nums[i] = nums[i / 2];
} else {
nums[i] = nums[i / 2] + nums[i / 2 + 1];
}
}
return *max_element(nums.begin(), nums.end());
}
};
判断过程可以化简,无需判断,直接通过i % 2,将两种情况合并成一个情况实现(因为一种是另一种的子动作),代码如下:
class Solution {
public:
int getMaximumGenerated(int n) {
if(n == 0) {
return 0;
}
vector<int> nums(n + 1);
nums[1] = 1;
for(int i = 2; i <= n; i ++) {
nums[i] = nums[i / 2] + i % 2 * nums[i / 2 + 1];
}
return *max_element(nums.begin(), nums.end());
}
};