码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 66. 加1

时间:2019-10-12 23:00:37      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:sum   lse   iss   不为   题解   vector   一个   str   依次   

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

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

你可以假设除了整数 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

标签:sum   lse   iss   不为   题解   vector   一个   str   依次   

原文地址:https://www.cnblogs.com/Eagleeye1105/p/11663719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!