题目

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”

解题思路

  • 模拟”乘法竖式“的计算方法

    • 计算"被乘数"与"乘数"的一位数相乘的积
    • 将上一步结果加到结果中

代码

class Solution {public String multiply(String num1, String num2) {if ("0".equals(num1) || "0".equals(num2)) return "0";StringBuilder resReverse = new StringBuilder(), num1Reverse = new StringBuilder(num1).reverse();// 模拟"乘法竖式"的计算方法for (int i = 0; i < num2.length(); i++) {// 得到"被乘数"与"乘数"的一位数相乘的积StringBuilder subResReverse =multiply(num1Reverse, num2.charAt(i) - 48, num2.length() - 1 - i);// 加到结果中resReverse = add(resReverse, subResReverse);}return resReverse.reverse().toString();}/*** 计算"被乘数"与"乘数"的一位数相乘的积** @param num1 被乘数(逆序)* @param num2 乘数的一位数* @param zero 补0的个数* @return 积(逆序):比如结果是"12",这里返回"21"*/private StringBuilder multiply(StringBuilder num1, int num2, int zero) {StringBuilder sb = new StringBuilder();for (int i = 0; i < zero; i++) sb.append('0');int carry = 0;for (int i = 0; i < num1.length(); i++) {int temp = (num1.charAt(i) - 48) * num2 + carry;carry = temp / 10;sb.append(temp % 10);}return carry > 0 ? sb.append(carry) : sb;}/*** 加法** @param num1 加数1(逆序)* @param num2 加数2(逆序)* @return 和(逆序):比如结果是"12",这里返回"21"*/public StringBuilder add(StringBuilder num1, StringBuilder num2) {StringBuilder sb = new StringBuilder();int length = Math.max(num1.length(), num2.length()), index = 0, carry = 0;while (index < length) {int temp = carry;if (index < num1.length()) temp += num1.charAt(index) - 48;if (index < num2.length()) temp += num2.charAt(index) - 48;index++;carry = temp / 10;sb.append(temp % 10);}return carry > 0 ? sb.append(carry) : sb;}
}

题目来源:力扣(LeetCode)

力扣题解:43. 字符串相乘:模拟“乘法竖式”相关推荐

  1. leetcode43(字符串相乘:模拟乘法竖式计算)

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

  2. LeetCode 43. 字符串相乘【c++/java详细题解】

    目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. ...

  3. python中字符串相乘结果_LeetCode 43. 字符串相乘 | Python

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

  4. 【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]

    刷题打卡,第 二十四 天 题目一.43. 字符串相乘 题目二.1800. 最大升序子数组和 题目一.43. 字符串相乘 原题链接:43. 字符串相乘 题目描述: 给定两个以字符串形式表示的非负整数 n ...

  5. 双指针算法 | 力扣344. 反转字符串

    本文讲解力扣344. 反转字符串问题 也就是使用双指针的思想 很简单的一道题 1 题目 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组 ...

  6. 力扣有没有java_力扣题解

    这里将告诉您力扣题解,具体实现方法:题目描述 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚 ...

  7. leetcode -43 -字符串相乘 -java版

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

  8. 数学老师从没这么教过,乘法竖式中进位可以是多位(附Python实现与测试源码)...

    大概十五年前,曾经写过一个C语言版本的类似代码.核心思想是:在乘法竖式计算过程中,每次的进位实际上是可以超过一位的,虽然老师从来没有这么教过. 这样的操作在Python中是没有必要的,因为Python ...

  9. c语言横纵坐标乘法,C语言 · 猜算式 · 乘法竖式

    题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273 x   15 ------ 1365 273 ------ 4095 请你观察如下的乘法算式 *** x   *** ------- ...

最新文章

  1. Python里面None True False之间的区别
  2. 损失函数(损失函数、代价函数、目标函数)、​​​​​​​MSE、0-1损失函数、绝对误差损失函数、分位数损失函数、Huber损失函数、感知损失函数、Hinge损失函数、指数损失函数、对数损失函数
  3. 药企信息化项目必经的三步走
  4. Golang 判断key是否在map中
  5. 第1章 游戏之乐——快速找出故障机器
  6. AHP层次分析法解决用户价值评估
  7. MyBatis 插件原理与自定义插件
  8. bp神经网络隐含层神经元个数_CNN,残差网络,BP网络
  9. Linux基本操作【作业】
  10. 能过JdbcTemplate,druid来查询表数据并封闭成Bean 与传统手工写法对比 100多行的代码 5行搞定 (Jar 牛B)
  11. 小白记事本--JAVA入门
  12. JAVA 入门PDF
  13. 图像上采样和图像下采样
  14. C语言程序设计型考册作业1,C语言程序设计作业 求解答
  15. 大数据主要应用于哪些行业,应用价值是什么?
  16. Jenkins之工作流程原理
  17. 如何用计算机将图片整成手绘画,【新手教程】如何将手绘作品转变成电子档,并让其更像“作品”?...
  18. 盘点五大好用的固定资产管理系统
  19. 魏小亮:参加编程竞赛对实际工作的用处
  20. numpy.corrcoef 计算相关系数

热门文章

  1. 锐捷网络的极简X是什么?
  2. spring boot整合IBM WebSphere MQ,并配置多个队列管理器
  3. html逐帧动画,CSS3动画之逐帧动画_html/css_WEB-ITnose
  4. 文心一言独立APP支持语音/ 知乎限制AI生成回答/ AMD新掌机芯片性能超NS二十倍...今日更多新鲜事在此...
  5. android仿微信联系人索引列表
  6. 如何实现物流评分功能
  7. 魔众视频教学系统 v2.1.0 页面SEO优化,系统升级调整
  8. windows程序设计(第2版 王艳平)学习记要:3.2 线程同步
  9. Linux命令小抄(适合打印)
  10. 陶哲轩实分析-第9章 R上的连续函数