1. 原题链接

https://leetcode.com/problems/multiply-strings/description/

2. 题目要求

给定两个String类型的正整数num1、num2,返回它们的String类型乘积

(1)num1和num2的长度都小于110;

(2)num1、num2都只包含0-9之间的字符;

(3)num1、num2的首位都不为0;

(4)不能使用BigInteger,也不能字符串转直接换成整数类型

3. 解题思路

首先题目要求不能直接将String转换成Integer,但我们可以利用“char-'0'”的方式将其强制转换成int类型,然后进行相乘。

例如下图中,num1=“123”,num2=“45”,首先创建一个整型数组num[ ]来保存每一位的结果,两数相乘的乘积长度肯定不超过这两个数的长度之和。这里的每一位指个、十、百、千...

使用两层for循环分别对两个字符串num1和num2进行遍历。

第一次遍历,num1.charAt(i) 得到‘3’,num2.charAt(j) 得到‘5’。使用num1.charAt(i) -'0'将char类型的‘3’转换成int类型的3,对num2进行同样的操作,用mul保存二者乘积。

然后用数组num[ ]来保存每一位的结果,指针p1=i+j、p2=i+j+1分别指向数组中两个连续的位置。此时p2位于数组的最后一位,保存个位上的数字。p1是数组的倒数第二位,保存十位上的数字。

在此之前,我们要确定个位、十位上的数字。sum保存两个数的乘积mul+个位上原有的数字(个位上原有数字为0),对sum整除10得到十位上的数字,sum对10取模得到个位上的数字。

两层for循环完成后,最终的num[ ]数组里就保存了二者乘积的每一位上的结果

然后将数组的元素取出来,转换成String类型,就得到了最终的结果

4.代码实现

public class MultiplyStrings43 {

    public static void main(String[] args) {
String num2 = "12345465656565";
String num1 = "4556";
System.out.println(multiply(num1, num2)); } public static String multiply(String num1, String num2) {
int m = num1.length(), n = num2.length();
int[] pos = new int[m + n]; // 用数组来保存不同位上的结果 for (int i = m - 1; i >= 0; i--) {
for (int j = n - 1; j >= 0; j--) {
int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0'); //-'0'强制转换成int类型
int p1 = i + j, p2 = i + j + 1;
int sum = mul + pos[p2]; pos[p1] += sum / 10;
pos[p2] = (sum) % 10;
}
} StringBuilder sb = new StringBuilder();
for (int p : pos) { // 将最后的乘积数组转换成String类型
if (!(sb.length() == 0 && p == 0)) sb.append(p);
}
return sb.length() == 0 ? "0" : sb.toString();
}
}

  

LeetCode:43. Multiply Strings (Medium)的更多相关文章

  1. LeetCode:39. Combination Sum(Medium)

    1. 原题链接 https://leetcode.com/problems/combination-sum/description/ 2. 题目要求 给定一个整型数组candidates[ ]和目标值 ...

  2. LeetCode:36. Valid Sudoku(Medium)

    1. 原题链接 https://leetcode.com/problems/valid-sudoku/description/ 2. 题目要求 给定一个 9✖️9 的数独,判断该数独是否合法 数独用字 ...

  3. 【leetcode】43. Multiply Strings(大数相乘)

    Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and ...

  4. LeetCode:16. 3Sum Closest(Medium)

    1. 原题链接 https://leetcode.com/problems/3sum-closest/description/ 2. 题目要求 数组S = nums[n]包含n个整数,找出S中三个整数 ...

  5. LeetCode:49. Group Anagrams(Medium)

    1. 原题链接 https://leetcode.com/problems/group-anagrams/description/ 2. 题目要求 给定一个字符串数组,将数组中包含相同字母的元素放在同 ...

  6. LeetCode:22. Generate Parentheses(Medium)

    1. 原题链接 https://leetcode.com/problems/generate-parentheses/description/ 2. 题目要求 给出一个正整数n,请求出由n对合法的圆括 ...

  7. LeetCode:9. Palindromic Number(Medium)

    原题链接:https://leetcode.com/problems/palindrome-number/description/ 1. 题目要求:判断一个int类型整数是否是回文,空间复杂度O(1) ...

  8. [Leetcode][Python]43: Multiply Strings

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 43: Multiply Stringshttps://leetcode.co ...

  9. 【leetcode】Multiply Strings(middle)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

随机推荐

  1. Vue-Quill-Editor插件插入图片的改进

    最近在做一个Vue-Clie小项目,使用到了Vue-Quill-Editor这个基于Vue的富文本编辑器插件.这个插件跟Vue契合良好,使用起来比其他的诸如百度UEditor要方便很多,但是存在一个小 ...

  2. 【转】Linux vmstat命令实战详解

    好久没写博客了,上个月忙的晕头转向的实在没有心情.最近会发几篇PowerDNS的,先预告一下. 这篇是纯转的,原贴地址:http://www.cnblogs.com/ggjucheng/archive ...

  3. UIView的多重属性

    1)几何属性: 2)位图属性:

  4. sqlserver数据库 表中字段值有空格,如何去除空格(例如char (5) 存入数据不足5位时sqlserver会自动补空格)

    普通的空格 前后的空格,使用LTrim和RTrim即可,例如:LTrim(RTrim(Name)) 中间的空格,使用replace函数替换,例如:Replace(Name,' ','') 如果是普通的 ...

  5. [JLOI2016/SHOI2016]侦察守卫

    嘟嘟嘟 这道题可以说是[HNOI2003]消防局的设立的升级版.距离从2改为了d. 辛亏d只有20,这也就是一个切入点. 令f[u][j]表示u四周 j - 1的距离需要被覆盖,g[u][j]表示u可 ...

  6. IDEA定位开发文件在左边工程中的文件路径

    IDEA新公司入职使用第七天,基本快捷键和BUG调试已经搞透了!从最开始的配置到现在的适应确实是一个不小的进步,前几天每天加班太忙没有时间更新博客,明天就是五一假期,现在将刚掌握的一点IDEA技术写出 ...

  7. XXE攻防——XML外部实体注入

    XXE攻防——XML外部实体注入 转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的 ...

  8. 认识Jmeter操作界面

    使用工具:Jmeter(版本apache-jmeter-2.13) 安装前提:JDK的安装. 主要对GUI操作界面的讲解 (http://jmeter-plugins.org/downloads/al ...

  9. HDU 1053 Entropy(哈夫曼编码 贪心+优先队列)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1053 Entropy Time Limit: 2000/1000 MS (Java/Others)   ...

  10. 【译】为什么要写super(props)

    译注: 原文地址 https://overreacted.io/why-do-we-write-super-props/ 正文 我听说Hooks是新的热点.好笑的是,我想通过描述一些关于class组件 ...