LeetCode【简单】 66.加一 递归解法

124 阅读2分钟

解题思路

首先 简单来讲这道题的题目是 给你一个数组 里面全是小于10 的数字
你需要将其变成全是字符串的数组 并且要给最后一个数加一
如果他大于10了 要进一位

这不简单明了?

我这个写的也不是很好,刚开始我是小看这个题了的,就简单的将数组join一下*1``+1然后siplt一下就提交了 果然 每道题都不能小看 ,我发了问题 直至我改到第九遍才通过 PS:进一位这一点还是我第六遍才理解了的 我发现[9] 要输出 ['1','0'] 然后又发现 [9,9,9] 要输出 ['1','0','0','0']

上面都是废话 -----------

分享一下我的思路

这里首先获取到 最大索引,转成字符的数组,最后一个数 为什么要获取的是转成字符的数组,因为如果转成字符串会有可能超过JS的Number类型数据的上限 2^53

然后采用递归的方法来做这个运算,因为要进位 进位置这里要判断他前面还有没有值,没有的话就直接塞进去一个 有的话就递归运算 因为这个最大值就10 所以我就直接塞入 0 和 1 了 嘿嘿!

代码

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function (digits) {
    var max = digits.length - 1,
        str = digits.join("").split(""), //字符串数组
        out = str[max] * 1, //最后一个数
        prv = ""
    prv = num(out, str, max)
    return prv
    function num(s, arr, index) {
        if (s + 1 >= 10) { // 如果最后一个大于10 
            arr[index] = "0"//就直接给变成0
            if (arr[index - 1] !== undefined) { //然后看一下他前面还有没有数
                num(arr[index - 1] * 1, arr, index - 1) //有的话就递归调用给他前面那个的加一
            } else { //没有的话就直接给他前面的加上一个字符串1就好了
                arr.unshift("1")
            }
        } else {
            arr[index] = (arr[index] * 1 + 1).toString()
        }
        return arr
    }
};

我很菜,目前只能做做简单的题

123.png