1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 string addStrings(string num1, string num2) 12 { 13 int pr1=num1.length()-1,pr2=num2.length()-1; 14 int flag=0; 15 string res; 16 char c1,c2; 17 while(pr1>=0||pr2>=0) 18 { 19 c1=(pr1>=0)? num1[pr1--]:'0'; 20 c2=(pr2>=0)? num2[pr2--]:'0'; 21 int cur=(c1-'0')+(c2-'0')+flag; 22 if(cur>9) 23 { 24 flag=1; 25 cur%=10; 26 } 27 else 28 flag=0; 29 res.push_back(cur+'0'); 30 } 31 if(flag==1) 32 res.push_back('1'); 33 reverse(res.begin(),res.end()); 34 return res; 35 } 36 };
这个题不难,但是要注意,字符串的加减时间代价很大,能不用就不用。
这里用的push_back(),其实这个函数也是有代价的
这个代码还能优化一下,就是直接设置一个足够长的res,改变其中元素即可。
优化后代码如下:
1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 string addStrings(string num1, string num2) 12 { 13 int pr1=num1.length()-1,pr2=num2.length()-1; 14 int maxlen=max(pr1,pr2)+2; 15 int flag=0; 16 string res(maxlen,'0'); 17 int i=maxlen-1; 18 char c1,c2; 19 while(pr1>=0||pr2>=0) 20 { 21 c1=(pr1>=0)? num1[pr1--]:'0'; 22 c2=(pr2>=0)? num2[pr2--]:'0'; 23 int cur=(c1-'0')+(c2-'0')+flag; 24 if(cur>9) 25 { 26 flag=1; 27 cur%=10; 28 } 29 else 30 flag=0; 31 res[i--]=(cur+'0'); 32 } 33 if(flag==1) 34 res[i--]='1'; 35 else 36 res.erase(res.begin()); 37 return res; 38 } 39 };
优化后运行速度快了一小丢丢
浙公网安备 33010602011771号