所以我有一个函数,它接受一个数组(例如[7,4,5]
),函数应该加1(所以,[7,4,6]
)。我已经建立了这个功能,它的工作原理!但我无法弄清楚这种情况:[1,9,9,9]
应该成为[2,0,0,0]
,而只是[2]
。
我提供了以下功能。任何建议都会非常有用。我真的做了一次递归,但这似乎是一个好主意。
function increment(arr){
let num = arr.pop();
if(num === 9){
increment(arr);
} else {
arr.push(num + 1);
console.log(arr);
}
}
答案 0 :(得分:3)
您可以加入数组值,然后将它们拆分为:
function increment(arr) {
let num = Number(arr.join(""));
return String(num + 1).split("").map(Number);
}
console.log(increment([1, 9, 9, 9]));
答案 1 :(得分:0)
如何将数组元素连接在一起然后解析int并添加1然后将其转换为字符串并将数字拆分为数组
var arr = [1,9,9];
numberString = arr.join('');
numberToIncrement = parseInt(numberString)+1;
arr = String(numberToIncrement).split('');
console.log(arr) // [2,0,0]
答案 2 :(得分:0)
首先将数组转换为Number
,然后将其递增1,然后将其转换回array
:
var arr=[9,9,9];
function increment(){
var anum=Number(arr.join(""));//converting arr to number
anum++; //incrementing the number
var newArr=anum.toString().split("")
alert(newArr); //final new array
}
increment();
答案 3 :(得分:0)
您可以使用Array#reduceRight
并保存随身携带物品。
适用于任何大小的数组。
function inc(array) {
var carry = array.reduceRight(function (r, a, i, aa) {
var v = a + r;
aa[i] = v % 10;
return Math.floor(v / 10);
}, 1);
carry && array.unshift(carry);
return array;
}
console.log(inc([7, 4, 5]));
console.log(inc([1, 9, 9, 9]));
console.log(inc([9, 9, 9, 9, 9]));

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 4 :(得分:0)
在递增9之后忘记追加0。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.0</version>
</dependency>
答案 5 :(得分:0)
虽然到目前为止给出的答案是正确的,但它们的运行时间线性地取决于输入元素的数量= O(n)。以下解决方案 - 平均 - 在恒定时间内运行= O(1):
// Increment array:
function increment(arr) {
let carry = 1;
for (let i = arr.length - 1; i >= 0 && carry > 0; --i) {
arr[i] += carry;
carry = Math.floor(arr[i] / 10);
arr[i] %= 10;
}
while (carry > 0) {
arr.unshift(carry % 10);
carry = Math.floor(carry / 10);
}
return arr;
}
// Example:
console.log(increment([9, 9]));
&#13;
对于n>&gt;,上述for循环的迭代次数朝向90收敛。 50,因此它平均在恒定时间内运行。最坏情况的时间复杂性仍然是线性的。