【力ボタン】整数からなる非空配列で表される非負の整数を与え、その数に1を加算する
1470 ワード
【力扣题库】#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タイプには長さ制限があるため,長さの大きい数字では誤差が生じることが分かった.
以上のコードと考え方には不適切な点がありますが、皆さんに指摘してもらい、皆さんが共に進歩することを望んでいます.