zoukankan      html  css  js  c++  java
  • LeetCode 415 Add Strings

    Problem:

    Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2.

    1. The length of both num1 and num2 is < 5100.
    2. Both num1 and num2 contains only digits 0-9.
    3. Both num1 and num2 does not contain any leading zero.
    4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

    Summary:

    以字符串的形式求两个整形数相加。

    Analysis:

    这道题是一道常规题,并不难,只需一位一位相加,注意在有进位的时候加上进位即可。

     1 class Solution {
     2 public:
     3     string addStrings(string num1, string num2) {
     4         int len1 = num1.size(), len2 = num2.size();
     5         int i = len1 - 1, j = len2 - 1, k = 0, carry = 0;
     6         char res[5200];
     7         
     8         while (i >= 0 && j >= 0) {
     9             int sum = num1[i] + num2[j] - 2 * '0' + carry;
    10             if (sum > 9) {
    11                 sum -= 10;
    12                 carry = 1;
    13             }
    14             else {
    15                 carry = 0;
    16             }
    17             
    18             res[k++] = sum + '0';
    19             i--; j--;
    20         }
    21         
    22         while (i >= 0) {
    23             int sum = num1[i] + carry - '0';
    24             if (sum > 9) {
    25                 sum -= 10;
    26                 carry = 1;
    27             }
    28             else {
    29                 carry = 0;
    30             }
    31             
    32             res[k++] = sum + '0';
    33             i--;
    34         }
    35         
    36         while (j >= 0) {
    37             int sum = num2[j] + carry - '0';
    38             if (sum > 9) {
    39                 sum -= 10;
    40                 carry = 1;
    41             }
    42             else {
    43                 carry = 0;
    44             }
    45             
    46             res[k++] = sum + '0';
    47             j--;
    48         }
    49         
    50         if (carry) {
    51             res[k++] = '1';
    52         }
    53         
    54         res[k++] = '';
    55         
    56         for (i = 0; i < k / 2; i++) {
    57             char tmp = res[i];
    58             res[i] = res[k - i - 2];
    59             res[k - i - 2] = tmp;
    60         }
    61         
    62         string resStr = string(res);
    63         
    64         return resStr;
    65     }
    66 };

    以上为我写的原始代码,代码过于冗长,下面是参考网上大牛的代码后优化的代码,代码简介了很多:

     1 class Solution {
     2 public:
     3     string addStrings(string num1, string num2) {
     4         int len1 = num1.size(), len2 = num2.size();
     5         int i = len1 - 1, j = len2 - 1, carry = 0;
     6         string res = "";
     7         
     8         while (i >= 0 || j >= 0) {
     9             int sum1 = i >= 0 ? num1[i--] - '0' : 0;
    10             int sum2 = j >= 0 ? num2[j--] - '0' : 0;
    11             
    12             int sum = sum1 + sum2 + carry;
    13             res.insert(res.begin(), sum % 10 + '0');
    14             carry = sum / 10;
    15         }
    16         
    17         return carry ? "1" + res : res;
    18     }
    19 };
  • 相关阅读:
    webpack引vue
    webpack加载css -loader
    webpack的使用
    leaflet(二)在地图上添加标记
    初学leaflet(一)引入地图资源
    Dom所有的属性,方法,和事件
    JavaScript所有函数和内置方法
    css padding 属性
    JavaScript正则表达式
    ES6 Promise
  • 原文地址:https://www.cnblogs.com/VickyWang/p/6014656.html
Copyright © 2011-2022 走看看