Given a non-empty array of digits representing a non-negative integer, plus
one to the integer.
You may assume the integer does not contain any leading zero, except the
number 0 itself.
Example 1:
- Input: [1,2,3]
- Output: [1,2,4]
- Explanation: The array represents the integer 123.
Example 2:
- Input: [4,3,2,1]
- Output: [4,3,2,2]
- Explanation: The array represents the integer 4321.
其实这道题的题意就是,给一个整数,每一位从高位到低位按顺序存续在vector当中,要求我们将这个整数+1 ,并将结果同样存储在vector当中并返回。
可以为两大种情况,进而分成三种情况:
1. 末尾数字<9,则直接将最后一位加一即可;
2. 末尾数字=9,则往前遍历,同时将每一位等于九的元素置零,当第一次碰到不为9的数字元素时,将该元素加一即可;(1399)
3. 末尾数字=9,则往前遍历,同时将每一位等于九的元素置零,发现所有位数均为9,此时新建一个vector(比输入的vector的size大1)将首位置1,同时其他位全为0;
✔ Accepted
✔ 109/109 cases passed (8 ms)
✔ Your runtime beats 38.19 % of cpp submissions
✔ Your memory usage beats 28.83 % of cpp submissions (8.7 MB)
vector<int> plusOne(vector<int>& digits) {
if(digits[digits.size() -1 ] != 9){
digits[digits.size() -1] += 1;
return digits;
}
int i = digits.size() -1;
while(i>=0 && digits[i] == 9){
i--;
}
if(i>=0){
digits[i] += 1;
for(int j= i+1; j<digits.size(); j++)
digits[j] = 0;
return digits;
}
else{
vector<int> res;
res.push_back(1);
for(int j=1; j<=digits.size(); j++)
//res[j] = 0; //这句越界了,访问了不知名的内存
res.push_back(0);
return res;
}
}
修改一部分:vector res(digits.size()+1); //意为创建这么多个初始化值为0的data
✔ Accepted
✔ 109/109 cases passed (4 ms)
✔ Your runtime beats 100 % of cpp submissions
✔ Your memory usage beats 55.21 % of cpp submissions (8.6 MB)
else{
vector<int> res(digits.size()+1);
//res.push_back(1);
res[0] = 1;
//for(int j=1; j<=digits.size(); j++)
//res[j] = 0;
//res.push_back(0);
return res;
}