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 };

优化后运行速度快了一小丢丢

posted on 2018-05-27 17:01  高数考了59  阅读(94)  评论(0)    收藏  举报