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. su

    参数选项:-,-l,--login 切换用户的同时,将用户的家目录.系统环境变量等重新按切换后的用户初始化.-c 向shell传递单个命令,仅希望在某个用户下执行命令,而不用直接切换到该用户下来操作. ...

  2. JPA注解实现联合主键

    当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用JPA注解实现联合主键的代码 1 首先需要建立一个复合主键类,用来存放需要生产联合主键的属性,该类需要实现序列化. packa ...

  3. Linux学习总结(九)-源码包和rpm包安装

    一.源码包安装 通常办法是安装三部曲:./configuremakemake install但是具体还要根据包里面的帮助文档操作./configure --help 可以查看可以带什么参数,比如--p ...

  4. 14、SpringBoot-CRUD错误处理机制(1)

    一.springboot默认的处理机制 1.浏览器返回一个错误的页面 默认处理错误:返回一个错误的页面: 包括错误类型.时间......   2.其他客户端访问 默认响应一个json数据 原理: 错误 ...

  5. viewsate用法

    ViewState["名称"]="ssss";直接赋值取值只能在同一个页面使用, 离开页面就会失效

  6. 剑指offer5 从尾到头打印链表

    错误代码: class Solution { public: vector<int> printListFromTailToHead(ListNode* head){ vector< ...

  7. GIS中的空间参考

    GIS一般都是研究的基于地球的某个区域,例如一个国家.省或市的情况,既然地球上都有经纬度来标识,那么直接用经纬度来标识物体的位置不可以吗?但如果应用不一样,在实际中选择的空间参考系也是不一样的.例如我 ...

  8. java基础知识(初学)

    (小记) 文本文档方式可以下载notepad 在设置-新建-修改默认语言为java 编码为ANSI! java关键字特点:1.完全小写字母.如:public. java标识符:方法的名称,类的名称,变 ...

  9. 【Django笔记四】Django2.0中的表单

    一.环境版本信息: 操作系统:windows10 Django版本:2.0.5 Python版本:3.6.4 Mysql版本: 5.5.53   安装mysql 二.基础信息 1.App中的模型mod ...

  10. MFC+ODBC+SQL Server+Visual C++

    利用SQL Server 和MFC实现对数据库的简单管理 工具:SQL Server,VC6.0 步骤如下: 1.建立一个数据库studentinfo,再建立一个表testtable,表设计和初始值如 ...