Nolga qo'shimcha funktsiyani qo'shishni aniqlab bo'lmaydi

Shuning uchun menda raqamlarning bir qatorini oladi (masalan, [7,4,5] ) va funktsiyani bir-biriga oshirish kerak (shuning uchun [7,4,6]/kodi>). Funktsiyani qurdim va u ishlaydi! Lekin bu vaziyatni tushunolmayman: [1,9,9,9] kodi [2,0,0,0] bo'lishi kerak, lekin buning o'rniga faqat [2] .

Quyidagi funktsiyani taqdim qildim. Har qanday taklif juda foydali bo'ladi. Men aslida rekursiya qildim, lekin bu yaxshi fikr edi.

function increment(arr){
  let num = arr.pop();
  if(num === 9){
    increment(arr);
  } else {
    arr.push(num + 1);
      console.log(arr);    
  }
}
1
[9, 9, 9] uchun qanday munosabatda bo'lishi kerak?
qo'shib qo'ydi muallif Rayon, manba
[9,9,9] [1,0,0,0] bo'lishi kerak.
qo'shib qo'ydi muallif Alex Marple, manba
Ooooh men buni butunlay inkor etdi. Ha. Hmm ...
qo'shib qo'ydi muallif Alex Marple, manba

6 javoblar

Array qiymatlarini qo'shib, keyin ularni quyidagi tarzda ajratishingiz mumkin:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function increment(arr) {
  let num = Number(arr.join(""));
  return String(num + 1).split("").map(Number);
}

console.log(increment([1, 9, 9, 9]));
</div> </div>
3
qo'shib qo'ydi
@Brian McCall kabi bir xil muammo, int ning o'rnini int sifatida qaytaradi. Boshqacha qilib aytganda uni qayta konvertatsiya qilmasdan uni qayta ishlata olmaysiz.
qo'shib qo'ydi muallif jdmdevdotnet, manba
console.log (newArr.map (Number)); va manipulyatsiyalangan qatorini
qo'shib qo'ydi muallif Rayon, manba
@jdmdevdotnet Xo'sh, funktsiyani o'zi aslida aniqlanmayapti - lekin, agar bo'lmasa ham, muhim emas, chunki Number (arr.join ("")) qatordagi qiymatlar satr yoki ints bo'lishidan qat'i nazar
qo'shib qo'ydi muallif mhodges, manba
@Rayon Men yangi qatorni qaytarish yoki olmasligimga ishonchim komil emas edi, chunki OV asli kodda hech narsa qaytarilmadi. Men uni qo'shib qo'ymoqchiman, chunki funktsional yondashuvdan kelib chiqadigan narsa mantiqan.
qo'shib qo'ydi muallif mhodges, manba

Siz Array # reduceRight -ni tanlang va unshifting uchun olib tashlang.

Har qanday o'lchamli massiv uchun ishlaydi.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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; }
</div> </div>
0
qo'shib qo'ydi
u kamaytirish bilan bir xil, ammo o'ng tomondan boshlanadi. indeks array.length - 1 dan nolga boradi.
qo'shib qo'ydi muallif Nina Scholz, manba
RedRight :) ni tushuntirib bera olasizmi?
qo'shib qo'ydi muallif user_0, manba

Hozirgi kunga qadar berilgan javoblar to'g'riligiga qaramay, ularning ish vaqti linear ravishda kirish elementlarining soniga = O (n) bog'liq. Quyidagi eritma ishlaydi - o'rtacha - doimo = O (1) da:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

// 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]));
</div> </div>

The number of iterations of above for-loop converges towards 90 for n >> 50, thus it runs in constant time on average. Worst-case time complexity remains linear.

0
qo'shib qo'ydi

Birinchidan, Number qatoriga 1 sonini o'zgartiring va keyin uni qatoriga qaytaring :<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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();
</div> </div>
0
qo'shib qo'ydi

qator elementlarini birlashtirib, int ni ajratib olish va qo'shib qo'yish 1, keyin uni mag'lubiyatga chiqarish va raqamni qatorga bo'lish

var arr = [1,9,9];
numberString = arr.join('');
numberToIncrement = parseInt(numberString)+1;
arr = String(numberToIncrement).split('');
console.log(arr)//[2,0,0]
0
qo'shib qo'ydi
Bu muammo int ning o'rniga string qaytaradi. Boshqacha qilib aytganda uni qayta konvertatsiya qilmasdan uni qayta ishlata olmaysiz.
qo'shib qo'ydi muallif jdmdevdotnet, manba
Ha, buni men o'yladim
qo'shib qo'ydi muallif Brian McCall, manba

9-soniyadan so'ng 0 ni qo'shib qo'yishni unutgansiz.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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] ));
</div> </div>
0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb