作者:小迅
鏈接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
題目
?文章來源地址http://www.zghlxwxcb.cn/news/detail-598120.html
思路
題意 -> 給定二個(gè)字符串,計(jì)算它們的和并同樣以字符串形式返回。
直接從尾部向頭部進(jìn)行枚舉,模擬實(shí)際計(jì)算過程,每取一個(gè)數(shù)就將字符轉(zhuǎn)換為數(shù)字,然后計(jì)算之后再將其轉(zhuǎn)換為字符存儲,最后判斷是否存在進(jìn)位,如果存在進(jìn)位就將進(jìn)位也存儲。
關(guān)于進(jìn)位的一個(gè)技巧,因?yàn)楹瓦\(yùn)算,進(jìn)位只可能有 1,因此在開辟內(nèi)存的時(shí)候就將進(jìn)位的位置開辟出來,并賦值 為 1,最后返回時(shí),如果存在進(jìn)位就返回字符串首地址,反之返回字符串首地址 + 1 ---- 去取進(jìn)位影響。
代碼注釋超級詳細(xì)
ps:此題我在去年的時(shí)候也做過一次,再回看當(dāng)時(shí)代碼時(shí),感慨萬千,通過看代碼就知道,當(dāng)時(shí)代碼水平非常有限,代碼寫的也非常冗余,經(jīng)過一年的學(xué)習(xí),進(jìn)步還是非常明顯的。各位努力吧?。?!
文章來源:http://www.zghlxwxcb.cn/news/detail-598120.html
?
代碼
char * addStrings(char * num1, char * num2){
int len1 = strlen(num1);
int len2 = strlen(num2);
int len = (len1 > len2 ? len1 : len2) + 2;
char *ans = malloc(sizeof(char) * len);
memset(ans, 0, len);//初始化
ans[0] = '1';//進(jìn)位賦值
int c = 0;//記錄進(jìn)位
for (int i = len - 2; i > 0; i--) {
int sum = 0;//記錄和
if (len1 > 0) {//取數(shù)
sum += (num1[len1 - 1] - '0');
--len1;
}
if (len2 > 0) {//取數(shù)
sum += (num2[len2 - 1] - '0');
--len2;
}
sum += c;//加上一位的進(jìn)位
c = sum / 10;//保存進(jìn)位
sum %= 10;//保存當(dāng)前位
ans[i] = sum + '0';//字符存儲
}
return c ? ans : ans+1;//判斷進(jìn)位返回對應(yīng)地址
}
作者:小迅
鏈接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
char * addStrings(char * num1, char * num2){
int num1_len = strlen(num1);
int num2_len = strlen(num2);
int len_1 = num1_len-1;
int len_2 = num2_len-1;
int max_len = num1_len>num2_len ? num1_len : num2_len;
char * num = malloc(sizeof(char) * (max_len+2));
int i =0,sum = 0,max = max_len+2;
while(len_1>=0&&len_2>=0)
{
sum = (num1[len_1--]-'0')+(num2[len_2--]-'0')+i;
i = sum/10;
sum = sum%10;
num[max_len--] = sum+'0';
}
while(len_1>=0)
{
sum = (num1[len_1--]-'0')+i;
i = sum/10;
sum = sum%10;
num[max_len--] = sum+'0';
}
while(len_2>=0)
{
sum = (num2[len_2--]-'0')+i;
i = sum/10;
sum = sum%10;
num[max_len--] = sum+'0';
}
if(i>0)
{
num[0] = i+'0';
num[max-1] ='\0';
return num;
}
num[max-1] ='\0';
return ++num;
}
作者:小迅
鏈接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
到了這里,關(guān)于LeetCode·每日一題·415. 字符串相加·模擬的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!