一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・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進数が必要であることがわかりました。
キャリーが不十分にならないように、最初に添え字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;//输出结果
}
};
复制代码