題目描述
題目分析
題目非常簡單,但是我還是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)
//著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。