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. QuantLib金融库的简易安装

    最近在弄毕设,研究关于固定收益债券定价方面的知识,需要使用到QuantLib这个Python金融库,但是这是一个C++编译的库,官网也只给出了源代码,安装起来十分繁琐,所以在网上找了一个简易的安装方法 ...

  2. 关于Hibernate的报错org.hibernate.MappingException: Unknown entity

    部分异常,如下 org.hibernate.MappingException: Unknown entity: com.zcd.hibernate.oneToMany.Teamat org.hiber ...

  3. 人类主动探索地外文明(METI)活动正在进行中

                  请看下图:            这是位于俄罗斯克里米亚境内的行星际深空通讯雷达(口径70米,2-300GHz,建造于1978年)的外观.借助该雷达的强大发射功率,有关国际 ...

  4. Struts2注解开发

    Hibernate和spring框架的开发前边总结了,这次看一下流行的MVC流程框架Struts2的注解开发吧.Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action ...

  5. 关于mysql 出现 1264 Out of range value for column 错误的解决办法

    今天给客服恢复mysql数据的时候.本来测试好的数据.但是到了客户那里却死活不干活了.老报错! INSERT INTO ka_tan4 set num='716641385999', username ...

  6. 配置开发环境&安装sklearn

    我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你的版本至少要3.4以上) Scikit-learn 0.20.0 (你的版本至少要0.19) Graphvi ...

  7. mongodb安装(比较全一点)

    Linux下MongoDB安装和配置详解  转:https://www.cnblogs.com/pfnie/articles/6759105.html 一.创建MongoDB的安装路径 在/usr/l ...

  8. 【Node.js】Jade视图模板的使用

    跟MVC里面的Rezor做差不多的事儿,但是比Rezor弱了一些,比较不喜欢CoffeeScript.Jade这种靠缩进来维系层级结构的做法,就好比接受不了c#中if下面只有一句很长的代码,但是却不加 ...

  9. Java中,如何跳出当前的多重嵌套循环

    在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环.(Java中支持带标签的break和continue语句)

  10. Django开发BUG汇总

    使用版本知悉 limengjiedeMacBook-Pro:~ limengjie$ python --version Python :: Anaconda, Inc. limengjiedeMacB ...