leetcode-陣列形式的整數加法-7
阿新 • • 發佈:2021-01-27
技術標籤:oj題
陣列形式的整數加法
題目要求
對於非負整數x而言,x的陣列形式是每位數字按從左到右的順序形成的陣列。例如,如果x=1231,那麼其陣列形式為[1,2,3,1]。給定非負整數x的陣列形式A,返回整數x+k的陣列形式。
示例1:
輸入:A = [2,1,5],k = 806
輸出:[1,0,2,1]
解釋:215 + 806 = 1021
思路
第一步,通過兩個數字的位數判斷開闢空間的大小,開闢空間大小要比數字的位數大一位,為了防止最高位進位。第二步,計算兩個數的每一位的值,並將這些加在一起,存在建立的新空間中。第三步,檢測最高位是否進位,如果進位,需要在最高為上新增一個1。第四步
圖解
程式碼實現
int* addToArrayForm(int* A, int ASize, int K, int* returnSize){ //計算K是一個幾位數 int num = K; int KSize = 0; while (num) { num /= 10; KSize++; } //判斷記憶體應該建立多大 int n = KSize > ASize ? KSize + 1 : ASize + 1; //建立記憶體 int* str = malloc(sizeof(int)*n); int KNum = 0;//某一位K的值 int Ai = ASize - 1;//A中陣列的下標 int next = 0;//進位 int i = 0;//str的下標 while (K > 0 || Ai >= 0) { //計算某一位K的值 KNum = K % 10; K /= 10; int ANum = 0;//某一位A的值 //計算某一位A的值 if (Ai >= 0) { ANum = A[Ai]; Ai--; } //判斷是否進位 int ret = KNum + ANum + next; if (ret >= 10) { ret %= 10; next = 1; } else { next = 0; } //將每一位的值傳進str str[i] = ret; i++; } //最高位進位 if (next == 1) { str[i] = 1; i++; } //控制輸出元素個數 *returnSize = i; //逆置 int left = 0; int right = i - 1; while (left <= right) { int tmp = str[left]; str[left] = str[right]; str[right] = tmp; left++; right--; } return str; }