[英]Can't figure out how to add a zero to increment function
所以我有一个函数,它接受一个数组(例如[7,4,5]
),函数应该增加一个(所以, [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);
}
}
您可以加入数组值,然后将它们拆分为:
function increment(arr) { let num = Number(arr.join("")); return String(num + 1).split("").map(Number); } console.log(increment([1, 9, 9, 9]));
如何将数组元素连接在一起然后解析int并添加1然后将其转换为字符串并将数字拆分到数组中
var arr = [1,9,9];
numberString = arr.join('');
numberToIncrement = parseInt(numberString)+1;
arr = String(numberToIncrement).split('');
console.log(arr) // [2,0,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();
您可以使用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; }
在增加9之后忘记追加0。
function increment(arr) { if (!arr || !arr.length) return [1]; let num = arr.pop(); if (num === 9) { let newArr = increment(arr) newArr.push(0); return newArr; } else { arr.push(num + 1); } return arr; } console.log(increment( [0] )); console.log(increment( [1,9,9] )); console.log(increment( [9,9,9,9] ));
虽然到目前为止给出的答案是正确的,但它们的运行时间线性地取决于输入元素的数量= 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]));
对于n >> 50,上述for循环的迭代次数收敛于90,因此它平均以恒定时间运行。 最坏情况的时间复杂性仍然是线性的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.