LeetCode 66. 加1

Posted eagleeye1105

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 66. 加1相关的知识,希望对你有一定的参考价值。

题目:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

思路与解答:

题解一:

这道题最直观的方法就是首先判断末位是否为9,不为9,直接加1返回,具体为:

  1. 从末位开始,判断是否为9,是?则置0,否,则加一返回;

  2. 依次循环判断,知道首位;

  3. 但完成循环后,还都需要判断是否首位为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;
    }
};

题解二:

此题另一种方法是设置一个标志位,具体步骤为:

  1. 定义标志位(进位)flag为1,从容器末位开始,将末位与标志为1相加,取余作为标志位,同时做除法,获得新的标志位;
  2. 依次循环,当标志位为0,即不需要进位时,返回结果,否则重复步骤1;
  3. 最后还需要判断容器首位的值;
  4. 结束。
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

以上是关于LeetCode 66. 加1的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 66. 加1

leetcode66. 加一(Plus One)

LeetCode 66 Plus One

Leetcode 66 Plus One STL

66 plus one

[LeetCode] NO. 66 Plus One