plus one/Multiply Strings

题目1:

leetcode 66
给定一个数组表示非负整数,其高位在数组的前面,对这个整数加1
思路:遍历数组的每位,同时处理进位,如果最后还有进位就在数组最前边插入1即可
注意计算flag的时候需要向下取整。

var plusOne = function(digits) {
    var flag=1;
    for(var i=digits.length-1;i>=0;i--){ 
         var a=digits[i]+flag;
         digits[i]=a%10;
         flag=Math.floor(a/10);//注意向下取整取的商
    }
    if(flag===1){
        digits.unshift(1)
    }
    return digits;
};

上边那种做法不仅适用于加1,还适用于加k,由于这道题目是加1,只有从低位开始全是9,才会不断产生进位,而且进位后数字为0。当且仅当说有数位全是9的时候,才会多进出1位,此时最高位是1,其他所有位全是0(由于多出1位,因此需要在最后添加1个0)

var plusOne = function(digits) {
    for(var i=digits.length-1;i>=0;--i){
        if(digits[i]===9){
            digits[i]=0;
        }else{
            digits[i]++;
            return digits;
        }
    }
    digits.unshift(1);
    return digits; 
};

题目2:

leetcode 43
题目:
求两个字符串数字的相乘,输入的两个数和返回的数都是以字符串格式储存的,这样做的原因可能是这样可以计算超大数相乘,可以不受int或long的数值范围的约束。
思路:
每位想成,然后错位相加,把错位相加后的结果保存到一个以为数组中,然后分别每位上算进位,最后每个数字都变成一位,然后要除掉首位0;最后把每位上上的数字按顺序保存到结果中即可。


plus one/Multiply Strings_第1张图片
image.png

其实关键在于如何将每位相乘的结果存入以为数组。

var multiply = function(num1, num2) {
    var n1=num1.length,
        n2=num2.length,
        k=n1+n2-2,
        v=[],
        flag=0;
    for(var i=0;i=0;i--){
        res+=v[i];
    }
    return res;  
};

你可能感兴趣的:(plus one/Multiply Strings)