如何将整数数组递增1

问题描述 投票:1回答:3

我有一个像这样的数组[1,9,9,9,9,9]。我想将此数组递增1并返回[2,0,0,0,0,0]。这是捕获 - 你不能加入()或concat()。除了添加数组之外,您无法以任何方式更改数组。但是,你可以改变它,但我不确定它会有多大帮助

此外,还有一些其他例子;

[1,8,9] => [1,9,0];

[1,2,3,9,1] => [1,2,3,9,2];

[5,7,9,9] => [5,8,0,0];

结果只能返回一位数的数组。

基本上,假装数组是一个数字,你加1。再次,没有加入,分裂,变成一个字符串......等。

理想情况下,我想要一个经典的循环解决方案或可能的递归解决方案。谢谢!

这是我的repl.it https://repl.it/@CharChar5/Code-Challenge

提前感谢您的帮助,如果我的问题标题太长且令人困惑,我非常抱歉。我当然正在努力格式化更好的问题并在SO上建立更强大的代表。

https://repl.it/@CharChar5/Code-Challenge

目前这是我的代码:

    jjChallenge=(j)=>{
     const len = j.length;
     const newArray = [];
      for(var i = 0; i<j.length; i++){
        if (j[i] == 9) {

         if(j[i-1] == 9) {

           n = 0;

        } else {

          newArray[i-1] = newArray[i-1] + 1;
          n = 0;
        }
         newArray.push(n);
         } else {
      newArray.push(j[i]);
    }
  }
  console.log(newArray)
}


   jjChallenge([2,9,9,9]) //works and returns [3,0,0,0]
    //[2,9,8,9] doesnt work and returns [3,0,9,0]
javascript arrays recursion
3个回答
1
投票

将其反转并随身携带然后将其反转

像是这样的东西

function incrementIntArray(arr) {
  var reverseArray = arr.reverse();
  var newReverseArray = [];
  var carry = false;
  for (var i = 0; i < arr.length; i++) {
    var curNum = reverseArray[i];
    if (i == 0 || carry) curNum++;
    if (curNum > 9) {
      carry = true;
      curNum = 0;
    } else {
      carry = false;
    }
    newReverseArray[i] = curNum;
  }
  return newReverseArray.reverse();
}

var arr1 = [1, 8, 9];
var arr2 = [1, 2, 3, 9, 1];
var arr3 = [5, 7, 9, 9];
console.log(incrementIntArray(arr1)); //outputs [1,9,0]
console.log(incrementIntArray(arr2)); //outputs [1,2,3,9,2]
console.log(incrementIntArray(arr3)); //outputs [5,8,0,0]

你的代码试图携带,但是当从上到下时很难携带,因此反向然后从下往上更容易携带


1
投票

你走了:

jjChallenge=(arr)=>{
  newArray=arr.map((element) => {
    return element==9?0:element+1
  })
  return newArray
}


jjChallenge([2,9,9,9])

1
投票

只需将数字相加然后加一。之后,拆分它。

符合简单和清洁

你不能加入()或concat()。除了添加数组之外,您无法以任何方式更改数组。

addOne = (data) => {
  let sum = 0, digit = data.length - 1
  data.forEach(n => sum += n * (10 ** digit--))
  return (sum + 1).toString().split("")
}
console.log(addOne([1,8,9]))
console.log(addOne([1,2,3,9,1]))
console.log(addOne([5,7,9,9]))
© www.soinside.com 2019 - 2024. All rights reserved.