43. 字符串相乘

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

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

1. num1 和 num2 的长度小于110。
2. num1 和 num2 只包含数字 0-9。
3. num1 和 num2 均不以零开头,除非是数字 0 本身。
4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

分析:

按照平时计算两数相乘的方式来计算,定义一个长度为num1.length()+num2.length()的int型数组num来存放结果。

第一步:

i指针遍历num1字符串,j指针遍历num2字符串,从最低位开始计算,i初始为num1.length()-1,j初始为num2.length()-1;将num1的第i位字符,num2的第j位字符转换为数字,两数相乘的结果记为sum,将sum%10累加到num[i+j+1]中,进位sum/10累加到num[i+j]中,由于类加后num[i+j+1]可能大于9,所以需要更新num[i+j+1],先将进位num[i+j+1]%10累加到num[i+j]中,再将num[i+j+1]更新为num[i+j+1]%10。

第二步:

遍历数组num,去除前导0,将结果拼接起来并返回。

代码:

class Solution {public String multiply(String num1, String num2) {if(num1.equals("0") || num2.equals("0")){return "0";}int len1 = num1.length();int len2 = num2.length();int [] num = new int[len1+len2];for(int i = len1-1; i>=0; i--){int t = num1.charAt(i)-'0';for(int j = len2-1; j>=0; j--){int sum = t * (num2.charAt(j)-'0');num[i+j+1] += sum %10;num[i+j] += (num[i+j+1]/10 + sum /10);num[i+j+1] %= 10;}}StringBuilder sb = new StringBuilder("");int k = 0;//去除前导0while(num[k] == 0 && k<len1+len2){k++;}for(; k<len1+len2; k++){sb.append(num[k]);}return sb.toString();}
}

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

  1. C++ ,leetcode 43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式

    一.思路: 字符串逆序,然后遍历两个逆序后的字符串,然后对应的字符相乘,i+j等于它的位数. string multiply(string num1, string num2) {reverseStr ...

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

    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 不能直接将输入的字符串转换为整数形式. 思路:将字符串从最小位进行相加,最后形成的字符串倒置 class Solution {pu ...

  3. 2021-10-20:分数到小数。给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。输入: num

    2021-10-20:分数到小数.给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数.如果小数部分为循环小数,则将循环的部分括在括号内.输入: num ...

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

    1.题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2" ...

  5. 随笔-给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和

    题目:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 ...

  6. 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串...

    1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 ...

  7. 云合智网 面试算法题 两个字符串相乘,例如“12345“ * “54321“,字符串不能直接转换为整型

    题目 两个字符串相乘,例如"12345" * "54321",字符串不能直接转换为整型 public class StringMultiplication {p ...

  8. LeetCode||有效的字母异位词(排列)--给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词

    原题链接:https://leetcode-cn.com/problems/valid-anagram 题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示 ...

  9. 算法019:字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。

    题目:字符串轮转.给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串).示例1:输入:s1 = "waterb ...

最新文章

  1. 模型优化的风向标:偏差与方差
  2. python多线程内存越要越大_Python 面试:这9个问题你一定要掌握!
  3. Django:文章详情页面评论功能需要登录后才能使用,登录后自动返回到文章详情页...
  4. VRML语法基础跟简介
  5. “分库分表 ?选型和流程要慎重,否则会失控
  6. 基数字符串排序c语言,基数排序(C语言)
  7. Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
  8. Java实现栈(顺序栈,链栈)
  9. 滑块 组件_组件制作:如何使用链接的输入创建滑块
  10. sqlserver oracle插件,SQLServer链接服务器至Oracle
  11. python实现汉诺塔程序
  12. 关于PHPExcel 导出下载表格,调试器响应乱码
  13. java单链表存储结构_Java数据结构——单链表
  14. c语言char aa 1000,char ** 与char * a[ ] 区别
  15. Android NDK学习(1) 简介
  16. Anylogic 创建一个简单的人口演变模型
  17. python脚本编程手册安卓版_python编程入门app下载
  18. 宽带拨号连接显示被远程计算机终止
  19. MySQL--通过mysqladmin命令修改密码提示:single quotes were not trimmed line client(Windows)
  20. border定义不同边框,虚线边框(dashed,dotted),实线边框(solid)

热门文章

  1. python数据采集仪_数据采集卡支持python么深入理解Python生成器(Generator)
  2. 构建之法---第一次作业
  3. 树莓派可以搜索到wifi但是连接不上的问题解决方法
  4. iphone 代码片段2
  5. EDM营销的关键是什么
  6. 完美解决PC电脑0x0和0x800BFA07等错误,成功加入Windows10/11预览体验计划
  7. Java 8中 直接通过List进行分组求和
  8. 如何给PDF文件进行加密?
  9. 三轴试验相关理论知识(1)
  10. Alibaba微服务组件Sentinel