繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM