每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加
生活随笔
收集整理的这篇文章主要介绍了
每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Plus One
原题链接Plus One
用数组表示一个整数,返回这个整数加一后的数组
其实只要从后面开始找,直到找到第一个不为9的位置,将其值加一然后就可以返回了,之前的9都变为0。
因为后面都是9,加一都变成0,然后向高位进位,使高位加一,只要当高位不是9时才会停止继续向高位进位,所以从后面开始找到第一个不为9的位置即可。
如果所有数字都是9,就说明需要增加一个高位1,比如999变为1000,但是数组只有3位,一种方法是在开头插入一个数字1,但是这就需要移动后面的元素了。仔细观察发现后面的元素都是0,那么可以将第一个0变为1,然后在数组后面追加一个0即可,不需要移动元素。
代码如下
class Solution { public:vector<int> plusOne(vector<int>& digits) {if(digits.empty())return digits;for(int i = digits.size() - 1; i >= 0; --i){/* 如果一直是9,就一直变0 */if(digits[i] == 9){digits[i] = 0;}/* 直到找到第一个不是9的,此时不再向高位进位,加一返回 */else{++digits[i];return digits;}}/* 如果一直是9,那么digits将全变为0,此时需要在高位添加一个1 */digits[0] = 1;digits.push_back(0);return digits;} };Add Strings
原题链接Add Strings
直接从后往前加即可
代码如下
Add Binary
原题链接Add Binary
将两个用字符串表示的二进制数相加。
从低位开始相加,并考虑进位,如果到达最高位时仍然有进位,需要增加一位。
代码如下
上述两道题都是整数加法,不过都是用数组或者字符串表示的整数,需要一位一位求解。数组加一的题中找到第一个不为0的位置的技巧可以减少循环次数。二进制相加的题中将当前位相加的值和进位用一个变量表示,同时判断是否有进位也放在循环中,省去了不少麻烦。
总结
以上是生活随笔为你收集整理的每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 每天一道LeetCode-----计算从
- 下一篇: 每天一道LeetCode-----将单词