leetcodeピット記:整数からなる非空配列で表される非負の整数を与え、その数に1を加える.


タイトル:


配列にジャンプ元のページをクリックを追加
整数からなる非空配列で表される非負の整数を与え、その数に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を補充することを歓迎します