【LeetCode】66. Plus One (2 solutions)

Plus One

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

 

从个位数字往前扫,只要一个数字不产生进位,即可加1返回。

如果直到最高位仍有进位,则在数组头部插入1,结果为100…0

解法一:

inplace但插入操作时会产生数组的移位

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

 

解法二:

inplace且数组不用移位

class Solution {
public:
    vector<int> plusOne(vector<int> &digits) {
        for(int i = digits.size()-1; i >= 0; i --)
        {
            if(digits[i] <= 8)
            {
                digits[i] += 1;
                return digits;
            }
            else
            {//9
                if(i != 0)
                    digits[i] = 0;
                else
                {
                    digits[0] = 1;
                    digits.push_back(0);
                    return digits;
                }
            }
        }
    }
};

posted @ 2014-12-09 23:31  陆草纯  阅读(2134)  评论(0编辑  收藏  举报