相加时要转换成对应的数字,所以让字符数字-'0' 如‘9’-‘0’=(ASCII)57-48=9
9+1=10,会进1,把进位保存起来,只取0头插到新串里。
头插时要转换对应字符数字,所以让对应的数字+‘0’ 如0+'0'=48 =='0'
之后下标往前走依次取值相加(每次都要+进位)。
- class Solution
- {
- public:
- string addStrings(string num1, string num2)
- {
- int end1=num1.size()-1,end2=num2.size()-1;
- int next=0;
- string str;
- while(end1>=0||end2>=0)
- {
- int val1 = 0;
- int val2 = 0;
- if(end1>=0)
- {
- val1=num1[end1--]-'0';
- }
- if(end2>=0)
- {
- val2=num2[end2--]-'0';
- }
- int ret=val1+val2+next;
- next=ret/10;
- ret%=10;
-
- str.insert(0,1,ret+'0');
- }
-
- return str;
- }
- };
发现还有用例没通过,可以看出是结束时循环走出来了没有+进位,所以在循环结束后加个判断条件:
- if(next==1)
- {
- str.insert(0,1,'1');
- }
最后看到用时很长,因为头插的时间复杂度是()。
把头插换成尾插
- class Solution
- {
- public:
- string addStrings(string num1, string num2)
- {
- int end1=num1.size()-1,end2=num2.size()-1;
- int next=0;
- string str;
- while(end1>=0||end2>=0)
- {
- int val1 = 0;
- int val2 = 0;
- if(end1>=0)
- {
- val1=num1[end1--]-'0';
- }
- if(end2>=0)
- {
- val2=num2[end2--]-'0';
- }
- int ret=val1+val2+next;
- next=ret/10;
- ret%=10;
-
-
- str.push_back(ret+'0');
- }
- if(next==1)
- {
- str.push_back('1');
- }
- reverse(str.begin(),str.end());
- return str;
- }
- };
时间复杂度(n)