美文网首页
leetcode算法练习- 加一

leetcode算法练习- 加一

作者: 土豪码农 | 来源:发表于2019-03-25 07:57 被阅读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
};

相关文章

  • leetcode算法练习- 加一

    第一次提交 把数组转化为数字,利用了数字运算特性加1,但是有点麻烦,而且数字有大小问题,js里面不能超过90071...

  • Python算法学习——个人日记系列(1)

    以Leetcode的练习题作为练习,来从零基础练习算法。 https://leetcode.com/problem...

  • 算法学习(递归和回溯)

    回溯法 LeetCode 17 电话的字母组合,方法:回溯算法 LeetCode 93 复原IP地址(练习)完...

  • leetcode算法练习

      虽然说我只是一个前端,算法相对来说并不是那么的重要,   但是作为一个程序员,算法多少还是要会一些的   对于...

  • 日常算法练习(二) Leetcode

    前言 这次算法练习是数组类型简单练习,以后LeetCode的练习会根据不同tags进行展开,先easy再到medi...

  • 日常算法练习(一) Leetcode

    前言 算法作为编程基本能力的体现,虽然日常工作很少使用到算法,但是面试大厂往往都会包含这一部分,因此,作为平时的基...

  • LeetCode (算法与数据结构系列 2)

    学习数据结构与算法,三分靠学习,七分靠练习,优秀的程序员都在使用的在线练习的算法题平台,LeetCode。http...

  • LeetCode 数组算法练习

    数组去重 只出现一次 交集 加一 移动零 两数之和

  • Swap Nodes in Pairs

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Swap Nodes in ...

  • Combination Sum II

    标签: C++ 算法 LeetCode DFS 每日算法——leetcode系列 问题 Combinatio...

网友评论

      本文标题:leetcode算法练习- 加一

      本文链接:https://www.haomeiwen.com/subject/ezumvqtx.html