• LeetCode415 字符串相加


    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

    注意:

    num1 和num2 的长度都小于 5100.
    num1 和num2 都只包含数字 0-9.
    num1 和num2 都不包含任何前导零。
    你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

    简单的一个双指针题目,需要注意的是一开始申请char数组的时候要多申请2位,1位用于可能的进位,1位用于写,。

     1 class Solution {
     2 public:
     3     string addStrings(string num1, string num2) {
     4         int len1 = num1.size();
     5         int len2 = num2.size();
     6         if (!len1)
     7             return num2;
     8         if (!len2)
     9             return num1;
    10         int maxlen = len1 > len2 ? len1 + 1 : len2 + 1;
    11         char* ret = new char[maxlen+1];
    12         ret[maxlen] = '';
    13         int aim = maxlen - 1;
    14         int i = len1 - 1, j = len2 - 1;
    15         int carry = 0;
    16         while (i >= 0 || j >= 0) {
    17             int n1 = i >= 0 ? num1[i] - '0' : 0;
    18             int n2 = j >= 0 ? num2[j] - '0' : 0;
    19             int sum = n1 + n2 + carry;
    20             carry = sum > 9 ? sum / 10 : 0;
    21             sum = sum % 10;
    22             ret[aim] = sum + '0';
    23             aim--;
    24             i--; j--;
    25         }
    26         if (carry) {
    27             ret[aim] = carry+'0';
    28         }
    29         else
    30             ++ret;
    31         string ans(ret);
    32         return ans;
    33     }
    34 };

    第二次再看,一个是老是忘记对char型做+'0'或者-'0'来转化成int,而且第一次最后没有释放申请的空间。

     1 class Solution {
     2 public:
     3     string addStrings(string num1, string num2) {
     4         int len1=num1.size();
     5         int len2=num2.size();
     6         if(num1.empty())
     7             return num2;
     8         if(num2.empty())
     9             return num1;
    10         int i=len1-1,j=len2-1;
    11         int maxlen=len1>len2?len1+2:len2+2;
    12         char* ret= new char[maxlen];
    13         ret[maxlen-1]='';
    14         int aim=maxlen-2;
    15         int carry=0;
    16         while(i>=0 || j>=0){
    17             int n1=i>=0?num1[i]-'0':0;
    18             int n2=j>=0?num2[j]-'0':0;
    19             int sum=n1+n2+carry;
    20             carry=sum>9?sum/10:0;
    21             sum%=10;
    22             i--;j--;
    23             ret[aim]=sum+'0';
    24             aim--;
    25         }
    26         string ans;
    27         if(carry){
    28             ret[0]=carry+'0';
    29             ans=ret;
    30         }
    31         else
    32             ans=ret+1;
    33         delete[] ret;
    34         return ans;
    35 
    36     }
    37 };
  • 相关阅读:
    2019 SDN上机第5次作业
    hdu 2553 N皇后问题(递归)
    百练oj 2766 最大子矩阵和
    POJ 1664 放苹果
    POJ 3617 Best Cow Line(贪心)
    HDU 2013 ACM/ICPC Asia Regional Hangzhou Online ------ Zhuge Liang's Mines
    HDU 4712 Hamming Distance (随机算法)
    HDU 1171 Big Event in HDU
    HDU 1085 Holding Bin-Laden Captive!
    HDU 1028 母函数
  • 原文地址:https://www.cnblogs.com/rookiez/p/13303120.html
Copyright © 2020-2023  润新知