题目

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:输入: num1 = "123", num2 = "456"
输出: "56088"
说明:num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

解决方法

class Solution {/*** 计算形式*    num1*  x num2*  ------*  result*/public String multiply(String num1, String num2) {if (num1.equals("0") || num2.equals("0")) {return "0";}// 保存计算结果String res = "0";// num2 逐位与 num1 相乘for (int i = num2.length() - 1; i >= 0; i--) {int carry = 0;// 保存 num2 第i位数字与 num1 相乘的结果StringBuilder temp = new StringBuilder();// 补 0 for (int j = 0; j < num2.length() - 1 - i; j++) {temp.append(0);}int n2 = num2.charAt(i) - '0';// num2 的第 i 位数字 n2 与 num1 相乘for (int j = num1.length() - 1; j >= 0 || carry != 0; j--) {int n1 = j < 0 ? 0 : num1.charAt(j) - '0';int product = (n1 * n2 + carry) % 10;temp.append(product);carry = (n1 * n2 + carry) / 10;}// 将当前结果与新计算的结果求和作为新的结果res = addStrings(res, temp.reverse().toString());}return res;}/*** 对两个字符串数字进行相加,返回字符串形式的和*/public String addStrings(String num1, String num2) {StringBuilder builder = new StringBuilder();int carry = 0;for (int i = num1.length() - 1, j = num2.length() - 1;i >= 0 || j >= 0 || carry != 0;i--, j--) {int x = i < 0 ? 0 : num1.charAt(i) - '0';int y = j < 0 ? 0 : num2.charAt(j) - '0';int sum = (x + y + carry) % 10;builder.append(sum);carry = (x + y + carry) / 10;}return builder.reverse().toString();}
}

说实话,对这道题,始终想不明白有什么意义。

算法----------字符串相乘(Java 版本)相关推荐

  1. 插入排序算法 java_排序算法实现-插入排序(Java版本)

    原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...

  2. JAVA算法:走迷宫回溯算法设计(JAVA版本)

    JAVA算法:走迷宫回溯算法设计(JAVA版本) 迷宫数组 int[][] maze = {                 {0, 1, 0, 0, 0},                 {0, ...

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

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

  4. 算法----------同构字符串(Java版本)

    题目 给定两个字符串 s 和 t,判断它们是否是同构的.如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的.所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同 ...

  5. 网易实习面经中的算法题(java版本含注释)

    目录 前言 7. 整数反转(中等) 9. 回文数(简单) 14. 最长公共前缀(简单) 20. 有效的括号(简单) 23. 合并K个升序链表(困难) 64. 最小路径和(中等) 103. 二叉树的锯齿 ...

  6. 算法------零钱兑换(Java版本)

    题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1.示例 1:输入: coins ...

  7. 算法----------快乐数 (Java版本)

    编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1.如 ...

  8. CSDN蓝桥杯算法题——题解Java版本——切面条

    目录 题目:切面条 答案目标: 推导过程: 解析过程: 对照Java编码1: 对照Java编码2: 总结: 题目:切面条 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以 ...

  9. 算法------------完全平方数(Java版本)

    题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少.示例 1:输入: n = 12 输出: 3 解释: 12 ...

最新文章

  1. 「 Luogu P2420 」 让我们异或吧
  2. curl参数为多维数组时提示数组到字符串的转换问题
  3. 转: MinGw离线安装方法集合
  4. 热部署在java中的包名_09-springboot工程中的热部署实现。
  5. 区块链入局,51小长假听歌、打游戏的姿势将被颠覆!
  6. MFC_CFileDialog_选择单一文件
  7. #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else
  8. 【SpringCloud】Spring cloud Alibaba Sentinel 热点规则
  9. 徐汉字java字符_汉字徐的拼音部首-汉字徐的笔画和解释-汉字徐在线查新华字典...
  10. 15 设置系统分词器
  11. Jmeter中的几个重要测试指标释义
  12. 运行Django,Python崩溃
  13. Substrings (C++ find函数应用)
  14. 雅高集团2021年即将开业的新酒店数量强劲增长
  15. 南阳oj 语言入门 房间安排
  16. Python中break语句和continue语句的用法
  17. android 动态改变button样式,Android 修改button颜色
  18. 汉字区位码位研究之生成指定数目的汉字
  19. 三维地图php源码,Three.js实现3D地图实例分享
  20. 充电复习之ES 扩展词库及热更新词库,扩展同义词词库,及热扩展词库

热门文章

  1. linux文件删除漏洞,OpenStack Glance v1 API任意文件删除漏洞(CVE-2012-4573)
  2. CloseHandle()函数的使用(转载)
  3. pythonselenium实战 excel读取和写入_Python3.6+selenium2.53.6自动化测试_读取excel文件的方法...
  4. 4种事务特性,5种隔离级别,7种传播行为
  5. 【安全牛学习笔记】手动漏洞挖掘(三)
  6. JS Range 对象的使用
  7. 将Unreal4打包后的工程嵌入到Qt或者桌面中
  8. Solr配置与简单Demo[转]
  9. iphone实现下拉列表(iOS开发 )
  10. margin折叠问题