[LeetCode]66.Plus One

来源:互联网 发布:mac系统钥匙串密码 编辑:程序博客网 时间:2024/05/21 06:18

【题目】

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

【题意】

给你一个用数组表示的数,求加一之后的结果,结果还是用数组表示。

【分析】

从低位到高位,连续遇到9才能加一进位。

【代码1】

/**********************************   日期:2014-01-22*   作者:SJF0115*   题号: Plus One*   来源:http://oj.leetcode.com/problems/plus-one/*   结果:AC*   来源:LeetCode*   总结:**********************************/#include <iostream>#include <stdio.h>#include <vector>using namespace std;class Solution {public:    vector<int> plusOne(vector<int> &digits) {        int i;        for(i = digits.size() - 1;i >= 0;--i){            if(digits[i] != 9){                ++digits[i];                return digits;            }            else {                digits[i] = 0;            }        }        //各位全是9        if(i < 0) {            digits.insert(digits.begin(),1);        }        return digits;    }};int main() {    Solution solution;    vector<int> result;    vector<int> array = {9,9,9};    result = solution.plusOne(array);    int n = result.size();    for(int i = 0;i < n;i++){        printf("%d",result[i]);    }//for    printf("\n");    return 0;}

【代码2】

class Solution {public:    vector<int> plusOne(vector<int> &digits) {        add(digits,1);        return digits;    }private:    //模版:数组表示的大数加一个整数(0-9)    void add(vector<int> &digits,int value){        int i;        //进位        int c = value;        int n = digits.size();        for(i = n - 1;i >= 0;i--){            digits[i] += c;            c = digits[i] / 10;            digits[i] %= 10;        }        //还有进位        if(c > 0){            digits.insert(digits.begin(),c);        }    }};


1 0