leetcode0066.加一

leetcode0066.加一 66. 加一给定一个表示大整数的整数数组digits其中digits[i]是整数的第i位数字。这些数字按从左到右从最高位到最低位排列。这个大整数不包含任何前导0。将大整数加 1并返回结果的数字数组。示例 1输入digits [1,2,3]输出[1,2,4]解释输入数组表示数字 123。 加 1 后得到 123 1 124。 因此结果应该是 [1,2,4]。示例 2输入digits [4,3,2,1]输出[4,3,2,2]解释输入数组表示数字 4321。 加 1 后得到 4321 1 4322。 因此结果应该是 [4,3,2,2]。示例 3输入digits [9]输出[1,0]解释输入数组表示数字 9。 加 1 得到了 9 1 10。 因此结果应该是 [1,0]。提示1 digits.length 1000 digits[i] 9digits不包含任何前导0。题目分析思路一比较朴实无华的做法是我们采取c中高精度的类似算法只不过这次加的是一个数1而已。c代码如下class Solution1 { public: vectorint plusOne(vectorint digits) { vectorint res; int carry0; for(int idigits.size()-1;i0;--i){ if(idigits.size()-1){ digits[i]1; carrydigits[i]; res.push_back(carry%10); carry/10; } else{ carrydigits[i]; res.push_back(carry%10); carry/10; } } if(carry)res.push_back(carry); reverse(res.begin(),res.end()); return res; } };思路二我们意识到在逆序遍历时只要找到第一个数不是9的数那么就不会产生进位直接将这个数之前的数都变为0然后直接返回这个数加1后的数组就好了若全部是9则添上一个1就好了。c代码如下class Solution { public: vectorint plusOne(vectorint digits) { for(int idigits.size()-1;i0;--i){ if(digits[i]!9){ digits[i]1; return digits; }//不为9就直接返回 else{ digits[i]0; }//其他的变为0 } vectorint res(digits.size(),0); res.insert(res.begin(),1); return res; } };python代码如下:class Solution(object): def plusOne(self, digits): :type digits: List[int] :rtype: List[int] for i in range(len(digits)-1,-1,-1): if digits[i] !9: digits[i]1 return digits else: digits[i]0 digits.append(0) digits[0]1 return digits思路三受益于Python独有的性质我们可以直接利用数据类型转换解题转换如下list-str-int-str-list最终只需要一行就能解决问题def plusOne1(self, digits): :type digits: List[int] :rtype: List[int] return map(int,list(str(int(.join(map(str,digits)))1)))代码的仓库放在https://github.com/silverwolf57/programming-problems同时也上传到了个人网站OrBit虽然目前还没有什么内容但是也会逐步做更多的内容更新。