leetcode数组之Plus One
2017-04-15 22:49
267 查看
/*【题目】 Given a number represented as an array of digits, plus one to the number. 【题意】 给你一个用数组表示的数,求加一之后的结果,结果还是用数组表示。 【分析】 思路是维护一个进位,对每一位进行加一,然后判断进位,如果有继续到下一位,否则就可以返回了,因为前面不需要计算了。 注意:如果到了最高位进位仍然存在,那么必须重新开辟一个空间,然后把第一个为赋值为1(因为只是加一操作,其余位一定是0,否则不会进最高位)。只需要一次扫描,所以算法复杂度是O(n),n是数组的长度。而空间上,一般情况是O(1),但是如果数是全9,那么是最坏情况,需要O(n)的额外空间,使用vector时,直接insert即可; 时间复杂度 O(n),空间复杂度 O(1)
*/ //本题中是PulsOne,更一般的情况是puls(k),本代码为一般情况 class Solution { public: vector<int> plusOne(vector<int> &digits) { add(digits,1); return digits; } private: void add(vector<int> &digits,int k) { int carryBit=k; for(auto it=digits.rbegin();it!=digits.rend();++it) { *it+=carryBit; carryBit=*it/10; *it%=10; } if(carryBit>0) digits.insert(digits.begin(),1); } }; //k=1 class Solution { public: vector<int> plusOne(vector<int> &digits) { // 从后往前,碰到第一个不是9的就对其加1,然后返回即可 for(int i = digits.size() - 1; i >= 0; -- i) { if(digits[i] == 9) digits[i] = 0; else { ++ digits[i]; return digits; } } // 最高位改成1,最后再添加个0 digits[0] = 1; digits.push_back(0); return digits; } }; //更一般的情况, 两个大数分别用两个数组表示,这两个数组相加;
相关文章推荐
- leetcode plus one
- Leetcode Plus One
- Leetcode Plus One
- LeetCode: Plus One
- leetcode c++ Plus One
- leetcode之Plus One
- leetcode Plus one
- LeetCode Plus One
- Plus One leetcode java
- LeetCode Plus One
- LeetCode Plus One
- Leetcode_plus-one(c++ and python updated)
- LeetCode之Plus One
- leetcode Plus One
- LeetCode Plus One
- Plus One @LeetCode
- LeetCode Plus One
- leetcode之Plus One
- LeetCode(67)Plus One
- LeetCode Plus One Java版解题报告