LeetCode 66[加一]
题目
链接
详情
实例
提示
题解
思路
错误思路
将数组转换为数字,然后进行+1运算
最后在力扣上提交,就成功的出错了,出错详情详见:https://leetcode.cn/problems/plus-one/submissions/584829592
数组有长度啊,长度是可以达到100的啊,哪里有这么大的类型存储嘞!!!
通过的思路
数组从首位开始是数字的最高位,则数字的最低位为数组末位
进行加1运算是从数字的低位开始进行的,所以就由数组末位开始遍历数字,进行加一运算
若运算结果超过10,则进行进位运算,就要到前一位去运算了
若运算结果没有超过10,则无需进行进位运算,就可以停止遍历了
然后将操作完的数组返回就可以了
需要注意的是,如果持续进位,直到数组的首位加1仍然是要进位的话,就需要在数组首部加上一个元素,为进位值,例如:[9, 9],则加1后变成[0, 0],还需在首部加上进位值1,即输出[1, 0, 0]
代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int iSize = digits.size();
int iCnt = 1;
for (int i = iSize - 1; i > 0; i--)
{
int iCount = digits.at(i) + iCnt;
iCnt = iCount / 10;
digits[i] = iCount % 10;
if (0 == iCnt)
return digits;
}
int iCount = digits.at(0) + iCnt;
digits[0] = iCount % 10;
iCnt = iCount / 10;
if (0 != iCnt)
digits.insert(digits.begin(), iCnt);
return digits;
}
};
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18586710