题目描述
题目分析
题目非常简单,但是我还是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)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。