LeetCode 字符串专题

﹏ヽ暗。殇╰゛Y 2022-10-16 06:09 279阅读 0赞

两个字符串直接操作

415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。同这题二进制求和

提示:

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

  1. // 模拟整数相加
  2. class Solution {
  3. public:
  4. string addStrings(string num1, string num2) {
  5. string res = "";
  6. int i1 = num1.size()-1, i2 = num2.size()-1;
  7. int add = 0;
  8. while(i1 >= 0 || i2 >= 0 || add != 0){
  9. int a = i1 >= 0 ? num1[i1] - '0':0;
  10. int b = i2 >= 0 ? num2[i2] - '0':0;
  11. int c = a + b + add;
  12. res += c % 10 + '0';
  13. add = c / 10;
  14. i1--;
  15. i2--;
  16. }
  17. reverse(res.begin(), res.end());
  18. return res;
  19. }
  20. };

43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = “2”, num2 = “3”
输出: “6”

示例 2:

输入: num1 = “123”, num2 = “456”
输出: “56088”

  1. class Solution {
  2. public:
  3. string multiply(string num1, string num2) {
  4. if (num1 == "0" || num2 == "0") {
  5. return "0";
  6. }
  7. //字符串乘法模拟
  8. int len2 = num2.length();
  9. string cur1 = multiply2(num1, num2[len2-1]);
  10. for(int i=1; i<num2.length(); ++i){
  11. string cur2 = multiply2(num1, num2[len2-i-1]);
  12. for(int j=0; j<i; ++j){
  13. cur2 += '0';
  14. }
  15. cur1 = addStrings(cur1, cur2);
  16. }
  17. return cur1;
  18. }
  19. string multiply2(string num1, char c){
  20. int len1 = num1.length();
  21. int add = 0;
  22. int b = c-'0';
  23. string cur = "";
  24. for(int i=0; i<len1; ++i){
  25. int a = num1[len1-i-1] - '0';
  26. cur += (a * b + add) % 10 + '0';
  27. add = (a * b + add) / 10;
  28. }
  29. if(add != 0){
  30. cur += add + '0';
  31. }
  32. reverse(cur.begin(), cur.end());
  33. return cur;
  34. }
  35. string addStrings(string num1, string num2) {
  36. string res = "";
  37. int i1 = num1.size()-1, i2 = num2.size()-1;
  38. int add = 0;
  39. while(i1 >= 0 || i2 >= 0 || add != 0){
  40. int a = i1 >= 0 ? num1[i1] - '0':0;
  41. int b = i2 >= 0 ? num2[i2] - '0':0;
  42. int c = a + b + add;
  43. res += c % 10 + '0';
  44. add = c / 10;
  45. i1--;
  46. i2--;
  47. }
  48. reverse(res.begin(), res.end());
  49. return res;
  50. }
  51. };

发表评论

表情:
评论列表 (有 0 条评论,279人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode 动态规划专题

    这是整理的LeetCode上的动态规划专题 背包问题 我们将LeetCode上的背包问题进行一个整理,希望之后再遇到以下问题能够快速解决。 组合问题 1. 如

    相关 LeetCode 二分专题

    这是整理的LeetCode上的二分专题,先按照codeTop上的频率顺序从高到低进行整理,然后按别人整理的进行再次整理。 二分搜索概述 先不从具体题来出发,而先从二分查

    相关 字符串专题(一)

    一直不太会字符串的处理,这周一定要攻克它。 str.toCharArray() : 将字符串转换为字符数组 【1】判断两个字符串是否互为变形词 题目:两个字符串str1