每日一算法-加一
题目
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
解析
本题是使用数组模拟的进位的问题。
首先从一个数组的最末位开始遍历(如果我们把数组看成数,则就是数的末位)。
在最末位的时候,sum = (数组[i] + 1 + 进位)%10 ; 进位 = (数组[i] + 1 + 进位)/ 10。
非最末位的时候,sum = (数组[i] + 进位)%10 ; 进位 = (数组[i] + 进位)/ 10。
尤其需要注意的是:当遍历到数组[0]的时候,如果此时还有进位,需要在数组的前边insert此进位。
最后直接返回结果就ok。
完整代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int jinwei = 0;
int sum = 0;
for(int i=digits.size()-1; i>=0; --i)
{
if(i == digits.size()-1)
{
sum = (digits[i]+1+jinwei)%10;
jinwei = (digits[i]+1+jinwei)/10;
}
else
{
sum = (digits[i]+jinwei)%10;
jinwei = (digits[i]+jinwei)/10;
}
digits[i] = sum;
sum = 0;
}
if(jinwei!=0)
digits.insert(digits.begin(), jinwei);
return digits;
}
};
结果
推荐阅读
今日问题
先给大家说声抱歉,今天忙了一天,晚了一点
思考一下,如何用计算机追你自己的另一半?新颖一点!
打卡格式:打卡第n天,答:...