【刷題】415. 字串相加——給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。
阿新 • • 發佈:2021-02-16
題目:415. 字串相加
給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。
解答
方法一:順序存放,對於頭插操作,時間複雜度為O(n)
class Solution
{
public:
string addStrings(string num1, string num2)
{
int begin1=num1.size()-1;
int begin2=num2.size()-1;
// 記錄進位
int step=0;
// 記錄 和
string sum;
while (begin1 >= 0 || begin2>= 0)
{
// 記錄當前位的值
int curSum=step;
if(begin1>=0)
curSum+=num1[begin1--]-'0';
if(begin2>=0)
curSum+=num2[begin2--]-'0';
// 判斷當前值是否需要進位
if(curSum>9)
{
step=1;
curSum-=10;
}
else
step=0;
// 順序表的頭插是一個時間複雜度為O(n)的操作
// 可以選擇先倒序存放資料
// 最後逆置順序表
sum.insert(0,1,curSum+'0');
}
// 判斷最高位是否有進位
if(step==1)
sum.insert(0, 1,'1');
return sum;
}
};
方法二:倒序存放,尾插是時間複雜度為O(1)的操作,最後選擇逆轉字串
class Solution
{
public:
string addStrings(string num1, string num2)
{
int begin1=num1.size()-1;
int begin2=num2.size()-1;
// 記錄進位
int step=0;
// 記錄 和
string sum;
while(begin1 >= 0 || begin2>= 0)
{
// 記錄當前位的值
int curSum=step;
if(begin1>=0)
curSum+=num1[begin1--]-'0';
if(begin2>=0)
curSum+=num2[begin2--]-'0';
// 判斷當前值是否需要進位
if(curSum>9)
{
step=1;
curSum-=10;
}
else
step=0;
// 尾插資料 倒序存放
sum+=curSum+'0';
}
// 判斷最高位是否有進位
if(step==1)
sum+='1';
// 逆轉字串
reverse(sum.begin(),sum.end());
return sum;
}
};