66 加一
思路很简单,从后向前扫描,如果当前位小于9,就加一然后退出循环,否则置零继续向前循环。最后判断一下第一位是不是0,是的话就在最前面插入1.
代码:
time: 79.93%, memory:5.37%
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int dig_len = digits.size();
for(int i = dig_len - 1; i >= 0; i--){
if (digits[i] < 9){
digits[i]++;
break;
}
else
digits[i] = 0;
}
if (digits[0] == 0)
digits.insert(digits.begin(), 1);
return digits;
}
};
283 移动零
题目要求将所有0移动到数组最后,其实可以反过来将不是0的移动到前面,最后将剩下的空置零。采用双指针法,一个记录当前非零数已经填充到哪里,一个记录当前扫描到哪里。
标签: 数组,双指针
代码:
time: 94.83%, memory: 5.03%
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int num_len = nums.size();
int p = 0, q = 0;
// move other elements to front
for(;q < num_len; q++){
if(nums[q] != 0){
nums[p] = nums[q];
p++;
}
}
while(p < num_len){
nums[p] = 0;
p++;
}
}
};
网友评论