leetcode算法练习- 加一

2019-03-25  本文已影响0人  土豪码农

第一次提交

把数组转化为数字,利用了数字运算特性加1,但是有点麻烦,而且数字有大小问题,js里面不能超过9007199254740992,否则就会出现不精确的问题

var plusOne = function (digits) {
    if (digits.length > 15) {
        const multiple = Math.ceil(digits.length / 15);
        const newArr = [];
        for (let i = 0; i < multiple; i++) {
            newArr.push(digits.slice(i * 15, (i + 1) * 15))
        }
        for (var i = newArr.length - 1; i >= 0; i--) {
            const arr = newArr[i];
            const length = arr.length;
            const num = parseInt(arr.join(''));
            const zeroNum = length - num.toString().length;
            if ((times('0',zeroNum)+((num+1).toString())).length === length) {
                newArr[i] = (times('0',zeroNum)+(num+1).toString()).split('');
                break;
            }else{
                if(i === 0){
                    newArr[i] = (num+1).toString().substring(0).split('');
                }else{
                    newArr[i] = (num+1).toString().substring(1).split('');
                }
            }
        }
        return newArr.reduce(function (arr,item) {
            return arr.concat(item)
        },[]);
    } else {
        const num = parseInt(digits.join(''));
        return (num + 1).toString().split('');
    }
};

function times(str, num){
    return new Array(parseInt(num)+1).join(str);
}

第二次提交

第二次提交就没使用转化为数字的方式,直接在数组上面操作

var plusOne = function (digits) {
    if(digits.length>15){
        for (let i = digits.length-1; i >= 0; i--) {
            if (digits[i] === 9) {
                digits[i] = 0;
                if (i === 0) {
                    digits.unshift(1)
                }
            } else {
                digits[i] += 1;
                break;
            }
        }
        return digits
    }else{
        const num = parseInt(digits.join(''));
        return (num + 1).toString().split('');
    }
};

最佳实现

容我再细细品味

var plusOne = function(digits) {
    var count = digits.length-1
    var plusNum = digits[count] = digits[count] + 1
    while(plusNum>=10){
        digits[count] = 0
        var count = count - 1
        if(count < 0){
            digits.unshift(1)
            break
        }
        plusNum = digits[count] = digits[count] + 1
    }
    return digits
};
上一篇 下一篇

猜你喜欢

热点阅读