题目描述
题目分析
题目非常简单,但是我还是wa了几发,对不起,我太菜了。我的想法是把K转换为数组然后用大整数加法处理。但是因为太久没有写了导致写了好久。
class Solution {
public:
void add(vector<int> &A, vector<int> &B) {
int len_A = A.size();
int len_B = B.size();
for (int i = 0; i < len_B; ++i) {
A[i] += B[i];
if (i + 1 >= A.size() ) {
A.push_back(0);
}
if (A[i] >= 10) {
A[i+1] += 1;
A[i] -= 10;
}
}
if (len_B < len_A) {
for (int i = len_B - 1; i < len_A; ++i) {
if (i + 1 >= A.size() ) {
A.push_back(0);
}
if (A[i] >= 10) {
A[i+1] += 1;
A[i] -= 10;
}
}
}
if (A[A.size() - 1] == 0) {
A.pop_back();
}
}
vector<int> addToArrayForm(vector<int>& A, int K) {
vector<int> B;
do {
B.push_back(K%10);
K/=10;
} while(K);
reverse(A.begin(), A.end());
add(A, B);
reverse(A.begin(), A.end());
return A;
}
};
然而题解的解法更加优雅明快,我还是有些局限自己的思路:
- 没有必要把k先转换为数组的形式,直接处理即可
- 在两种情况需要处理差不多的代码时活用短路运算符
||
往往有简化代码的效果
class Solution {
public:
vector<int> addToArrayForm(vector<int> &A, int K) {
vector<int> res;
int n = A.size();
for (int i = n - 1; i >= 0 || K > 0; --i, K /= 10) {
if (i >= 0) {
K += A[i];
}
res.push_back(K % 10);
}
reverse(res.begin(), res.end());
return res;
}
};
//作者:LeetCode-Solution
//链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/shu-zu-xing-shi-de-zheng-shu-jia-fa-by-l-jljp/
//来源:力扣(LeetCode)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。