解题思路
首先 简单来讲这道题的题目是
给你一个数组
里面全是小于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
}
};