leetcodeピット記:整数からなる非空配列で表される非負の整数を与え、その数に1を加える.
1944 ワード
タイトル:
配列にジャンプ元のページをクリックを追加
整数からなる非空配列で表される非負の整数を与え、その数に1を加える.
最上位の数値は配列の先頭に格納され、配列内の各要素には単一の数値のみが格納されます.
整数0を除いて、この整数はゼロで始まると仮定できます.
//
: [1,2,3]
: [1,2,4]
: 123。
//
: [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]
回答:
エラー方法:この問題を見ると、最初の反応は配列を数字に変えてプラスし、数字を散らして文字列に戻すことです.
// , digits.length
var plusOne = function(digits) {
var countNum = Number(digits.join().replace(/\,/g,'')) + 1;
var newArr = String(countNum).split('');
newArr.map(function(v,i){newArr[i] = parseInt(v)});
return newArr;
};
plusOne([1,2,3]) // [1,2,4]
plusOne([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,0,0,0]
/*
Number("6145390195186705543")
"6145390195186705543"*1
parseInt("6145390195186705543")
3 :6145390195186705000
*/
正しい方法:配列の1つの数字の計算、ずっと再帰します
var plusOne = function(digits) {
var locationNum = digits.length - 1; //
function count_alone(index){
// 9 +1
if(digits[index] < 9){
digits[index] = digits[index]+1;
return digits;
}else{
// 0, -1
digits[index] = 0;
locationNum --;
if(index == 0){
digits.unshift(1);
}else{
count_alone(locationNum);
}
}
}
count_alone(locationNum);
return digits;
};
markは参考までに訂正してendを補充することを歓迎します