【力ボタン】整数からなる非空配列で表される非負の整数を与え、その数に1を加算する


【力扣题库】#66加一


整数からなる非空配列で表される非負の整数を与え、その数に1を加える.
最上位の数値は配列の先頭に格納され、配列内の各要素には単一の数値のみが格納されます.
整数0を除いて、この整数はゼロで始まると仮定できます.

例1:

  : [1,2,3]
  : [1,2,4]
  :          123。

例2:

  : [4,3,2,1]
  : [4,3,2,2]
  :          4321。

この問題は力ボタン問題ライブラリから来ている.

テストケース


以下のいくつかのテスト例は、コードを書き終わった後、テストするのに便利です.
[1,2,3] > [1,2,4] [9] > [1,0] [9,9,9] > [1,0,0,0] [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3] > [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]

構想


配列の最後のビットが9でない場合は、直接+1でよい.ここでは、999999999999など、数字9の場合を重点的に考慮する必要があります.そうすると+1が1つ入り、配列の長さも増加し、1001000などになります.ループを用いて,現在の配列の要素が数値9である場合を後から見ることができる.9でなければ、直接1を加えて配列を返します.9であれば現在ビットをそのまま0にし、次に9の場合をループ判定する.配列要素がすべて9である場合、すなわち[9,9,9,9,9,9]の場合、入力配列よりも1桁大きく、1番目が1で、後ろが0である新しい配列を確立することができる.

リファレンスコード

var plusOne = function(digits) {

    let len = digits.length;
    //          ,  9   
    for(let i = len-1;i>=0;i--){
        if(digits[i] == 9){
            digits[i] = 0;
        }else{
            digits[i] ++;
            return digits;
        }     
    }
    //       9,      
    let newDigits = [1].concat(digits);
    return newDigits;     
};

まとめ


これまでも配列を直接数字に変換して、数字を直接+1にして、配列に戻す形を考えていました.しかし,numberタイプには長さ制限があるため,長さの大きい数字では誤差が生じることが分かった.
以上のコードと考え方には不適切な点がありますが、皆さんに指摘してもらい、皆さんが共に進歩することを望んでいます.