Skip to content

[LeetCode] 66. Plus One #66

@grandyang

Description

@grandyang


请点击下方图片观看讲解视频
Click below image to watch YouTube Video
Video

You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0's.

Increment the large integer by one and return the resulting array of digits.

Example 1:

Input: digits = [1,2,3] Output: [1,2,4] Explanation: The array represents the integer 123. Incrementing by one gives 123 + 1 = 124. Thus, the result should be [1,2,4]. 

Example 2:

Input: digits = [4,3,2,1] Output: [4,3,2,2] Explanation: The array represents the integer 4321. Incrementing by one gives 4321 + 1 = 4322. Thus, the result should be [4,3,2,2]. 

Example 3:

Input: digits = [9] Output: [1,0] Explanation: The array represents the integer 9. Incrementing by one gives 9 + 1 = 10. Thus, the result should be [1,0].  

Constraints:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits does not contain any leading 0's.

将一个数字的每个位上的数字分别存到一个一维向量中,最高位在最开头,我们需要给这个数字加一,即在末尾数字加一,如果末尾数字是9,那么则会有进位问题,而如果前面位上的数字仍为9,则需要继续向前进位。具体算法如下:首先判断最后一位是否为9,若不是,直接加一返回,若是,则该位赋0,再继续查前一位,同样的方法,直到查完第一位。如果第一位原本为9,加一后会产生新的一位,那么最后要做的是,查运算完的第一位是否为0,如果是,则在最前头加一个1。代码如下:

C++ 解法一:

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.front() == 0) digits.insert(digits.begin(), 1); return digits; } }; 

Java 解法一:

public class Solution { public int[] plusOne(int[] digits) { int n = digits.length; for (int i = digits.length - 1; i >= 0; --i) { if (digits[i] < 9) { ++digits[i]; return digits; } digits[i] = 0; } int[] res = new int[n + 1]; res[0] = 1; return res; } } 

我们也可以使用跟之前那道 Add Binary 类似的做法,将 carry 初始化为1,然后相当于 digits 加了一个0,处理方法跟之前那道题一样,参见代码如下:

C++ 解法二 :

class Solution { public: vector<int> plusOne(vector<int>& digits) { int carry = 1, n = digits.size(); for (int i = n - 1; i >= 0; --i) { if (carry == 0) return digits; int sum = digits[i] + carry; digits[i] = sum % 10; carry = sum / 10; } if (carry == 1) digits.insert(digits.begin(), 1); return digits; } }; 

Java 解法二 :

public class Solution { public int[] plusOne(int[] digits) { int carry = 1, n = digits.length; for (int i = digits.length - 1; i >= 0; --i) { if (carry == 0) return digits; int sum = digits[i] + carry; digits[i] = sum % 10; carry = sum / 10; } int[] res = new int[n + 1]; res[0] = 1; return carry == 0 ? digits : res; } } 

Github 同步地址:

#66

类似题目:

Add Binary

Multiply Strings

Plus One Linked List

Add to Array-Form of Integer

Minimum Operations to Reduce an Integer to 0

参考资料:

https://leetcode.com/problems/plus-one/

https://leetcode.com/problems/plus-one/discuss/24082/my-simple-java-solution

https://leetcode.com/problems/plus-one/discuss/24084/Is-it-a-simple-code(C%2B%2B)

LeetCode All in One 题目讲解汇总(持续更新中...)

(欢迎加入博主的知识星球,博主将及时答疑解惑,并分享刷题经验与总结,快快加入吧~)

知识星球 喜欢请点赞,疼爱请打赏❤️~.~

微信打赏

|

Venmo 打赏


---|---

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions