题目:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
思路与解答:
题解一:
这道题最直观的方法就是首先判断末位是否为9,不为9,直接加1返回,具体为:
- 从末位开始,判断是否为9,是?则置0,否,则加一返回;
- 依次循环判断,知道首位;
- 但完成循环后,还都需要判断是否首位为0,为0?则在首位前插入一位,置1。
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n = digits.size();
for(int i = n - 1; i >= 0; i--)
{
if (digits[i] == 9) digits[i] = 0;
else
{
digits[i] += 1;
return digits;
}
}
if(digits[0] == 0) digits.insert(digits.begin(), 1);
return digits;
}
};
题解二:
此题另一种方法是设置一个标志位,具体步骤为:
- 定义标志位(进位)flag为1,从容器末位开始,将末位与标志为1相加,取余作为标志位,同时做除法,获得新的标志位;
- 依次循环,当标志位为0,即不需要进位时,返回结果,否则重复步骤1;
- 最后还需要判断容器首位的值;
- 结束。
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
if (digits.empty()) return digits;
int n = digits.size();
int sum, flag = 1;
for (int i = n-1; i >= 0; i--)
{
if (flag == 0) return digits;
sum = digits[i] + flag;
digits[i] = sum % 10;
flag = sum / 10;
}
if (digits[0] == 0) digits.insert(digits.begin(), 1);
return digits;
}
};
参考:
https://github.com/grandyang/leetcode/issues/66
原文地址:https://www.cnblogs.com/Eagleeye1105/p/11663719.html
时间: 2024-10-06 06:09:46