Saturday, April 18, 2015

Plus one

Problem:
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.


Solution:
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        vector<int> sol;
        
        int size = digits.size();
        int carry = 1;
        for (int i = size - 1; i >= 0; i--) {
            sol.push_back((digits[i] + carry) % 10);
            carry = (digits[i] + carry) / 10;
        }
        if (carry)
            sol.push_back(carry);
        reverse(sol.begin(), sol.end());
        return sol;
    }
};
===== Another approach =====
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int carry = 1, size = digits.size(), i = size - 1;
        if (size == 0) {
            digits.push_back(carry);
            return digits;
        }
        while (carry) {
            if (i < 0) {
                digits.insert(digits.begin(), carry);
                return digits;
            }
            int temp = digits[i] + carry;
            digits[i--] = temp % 10;
            carry = temp / 10;
        }
        return digits;
    }
};

===== Another approach =====
class Solution {
public:
    vector<int> plusOne(vector<int> &digits) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (digits[digits.size()-1]!=9){
            digits[digits.size()-1]++;
            return digits;
        }else{
            digits[digits.size()-1]=0;
            int carry=1;
             
            for (int i=digits.size()-2;i>=0;i--){
                if (digits[i]!=9){
                    digits[i]++;
                    return digits;
                }else{
                    digits[i]=0;
                }
            }
            vector<int> res(digits.size()+1,0);
            res[0]=1;
            return res;
        }
    }
};

================
class Solution { public: vector<int> plusOne(vector<int>& digits) { reverse(digits.begin(), digits.end()); int carry = 1; for (int& digit : digits) { int tmp = digit + carry; digit = tmp % 10; carry = tmp / 10; } if (carry != 0) { digits.push_back(carry); } reverse(digits.begin(), digits.end()); return digits; } };

No comments:

Post a Comment