アルゴリズムは毎日の練習に質問します---73日目:1つ追加します

一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して8日目です。クリックしてイベントの詳細をご覧ください

1.問題の説明

 空でない整数の配列で表される非負の整数が与えられた場合 その数に1を加算します。

最上位桁は配列の最初の位置に格納され、配列の各要素は1つの数値のみを格納します。

この整数は、整数0を除いてゼロから始まらないと想定できます。

トピックリンク:プラス1

第二に、主題の要件

例1

输入: digits = [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
复制代码

例2

输入: nums = [9,9]
输出: [1,0,0]
复制代码

訪問

1.数学思想、进位
2.建议用时15~35min
复制代码

3.問題分析

私がこの質問を最初に見始めたとき、私はそれがとても単純で、最後の桁に+1するだけで、すぐにそれを殺すと思いました。提出したところ、タイトルには10進数の演算に相当する完全な10進数が必要であることがわかりました。

2.png

キャリーが不十分にならないように、最初に添え字0からストレージを開始し、最後に配列を反転する必要があります。

キャリーを示すためにrを定義します。フル10の場合は1、初期値は1です。タイトルは+1である必要があるため、後でキャリーrを追加する必要があるのは対応する添え字のみです。

この場合、特殊なケースに対応する必要があります。つまり、最後にrを進める必要がありますが、下付き文字が最後に達しています。この場合、1桁を追加する必要があります。

第四に、エンコーディングの実装

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int i,n=digits.size(),r=1,k;//初始化数据
        vector<int>v;//存储数据
        for(i=0;i<n;i++)//数组从0~n-1存储
        {
            k=digits[n-1-i]+r;//计算
            v.push_back(k%10);//存储
            r=k/10;//判断是否向前进位
        }
        if(r!=0)//还需要向前进位
            v.push_back(r);
        reverse(v.begin(),v.end());//翻转数组
        return v;//输出结果
    }
};
复制代码

5.テスト結果

3.png

1.png

おすすめ

転載: juejin.im/post/7084045859955933197