1. 程式人生 > 其它 >【刷題】415. 字串相加——給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。

【刷題】415. 字串相加——給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。

題目: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;
    }
};