无法弄清楚如何添加零增量功能

时间:2017-03-14 19:41:46

标签: javascript arrays recursion

所以我有一个函数,它接受一个数组(例如[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);    
  }
}

6 个答案:

答案 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):

&#13;
&#13;
// 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;
&#13;
&#13;

对于n>&gt;,上述for循环的迭代次数朝向90收敛。 50,因此它平均在恒定时间内运行。最坏情况的时间复杂性仍然是线性的。