Leetcode毎日1題:989.配列形式の整数加算c++実装
5686 ワード
目次 問題説明 構想分析及びコード実現
問題の説明
非負の整数Xの場合、Xの配列形式は、各数字が左から右の順に形成される配列である.例えば,X=1231の場合,その配列形式は[1,2,3,1]である.
非負の整数Xの配列形式Aが与えられ、整数X+Kの配列形式が返される.
例1:
入力:A=[1,2,0,0],K=34出力:[1,2,3,4]解釈:1200+34=1234例2:
入力:A=[2,7,4],K=181出力:[4,5,5]解釈:274+181=455例3:
入力:A=[2,1,5],K=806出力:[1,0,2,1]解釈:215+806=1021例4:
入力:A=[9,9,9,9,9,9,9,9,9,9,9,K=1出力:[1,0,0,0,0,0,0,0]解釈:9999999999+1=10000000
ヒント:
1<=A.length<=10000 0<=A[i]<=9 0<=K<=10000 A.length>1の場合、A[0]!=0
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/add-to-array-form-of-integer著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
構想分析とコード実現
この問題はvectorに関して、最初は習ったことがないので、私はまずvectorの使い方を勉強しました.https://blog.csdn.net/qaqlalala/article/details/112992437実はvectorとpythonのlistは似ています.この問題では、2つの数の対応するビットを加算して、最後のビットから、10いっぱいになったら1に入り、sumを10減らしてsumをpush_で使うことができます.back(sum)をvectorに追加Kの値がAより大きい場合、余分なビットのKの値を追加する必要があります最後のビットからvectorに追加したいので、最後にreverse法で反転して結果を出力します
問題の説明
非負の整数Xの場合、Xの配列形式は、各数字が左から右の順に形成される配列である.例えば,X=1231の場合,その配列形式は[1,2,3,1]である.
非負の整数Xの配列形式Aが与えられ、整数X+Kの配列形式が返される.
例1:
入力:A=[1,2,0,0],K=34出力:[1,2,3,4]解釈:1200+34=1234例2:
入力:A=[2,7,4],K=181出力:[4,5,5]解釈:274+181=455例3:
入力:A=[2,1,5],K=806出力:[1,0,2,1]解釈:215+806=1021例4:
入力:A=[9,9,9,9,9,9,9,9,9,9,9,K=1出力:[1,0,0,0,0,0,0,0]解釈:9999999999+1=10000000
ヒント:
1<=A.length<=10000 0<=A[i]<=9 0<=K<=10000 A.length>1の場合、A[0]!=0
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/add-to-array-form-of-integer著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
構想分析とコード実現
この問題はvectorに関して、最初は習ったことがないので、私はまずvectorの使い方を勉強しました.https://blog.csdn.net/qaqlalala/article/details/112992437実はvectorとpythonのlistは似ています.この問題では、2つの数の対応するビットを加算して、最後のビットから、10いっぱいになったら1に入り、sumを10減らしてsumをpush_で使うことができます.back(sum)をvectorに追加Kの値がAより大きい場合、余分なビットのKの値を追加する必要があります最後のビットからvectorに追加したいので、最後にreverse法で反転して結果を出力します
class Solution {
public:
vector<int> addToArrayForm(vector<int>& A, int K) {
vector<int> ans;
int n = A.size();
for(int i = n - 1; i >= 0; --i){
int sum = A[i] + K % 10;
K /= 10;
if(sum >= 10){
K++;
sum -= 10;
}
ans.push_back(sum);
}
for(;K > 0;K /= 10){
ans.push_back(K%10);
}
reverse(ans.begin(), ans.end());
return ans;
}
};