字符串相乘(给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。)
43. 字符串相乘
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
说明:
1. num1 和 num2 的长度小于110。
2. num1 和 num2 只包含数字 0-9。
3. num1 和 num2 均不以零开头,除非是数字 0 本身。
4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
分析:
按照平时计算两数相乘的方式来计算,定义一个长度为num1.length()+num2.length()的int型数组num来存放结果。
第一步:
i指针遍历num1字符串,j指针遍历num2字符串,从最低位开始计算,i初始为num1.length()-1,j初始为num2.length()-1;将num1的第i位字符,num2的第j位字符转换为数字,两数相乘的结果记为sum,将sum%10累加到num[i+j+1]中,进位sum/10累加到num[i+j]中,由于类加后num[i+j+1]可能大于9,所以需要更新num[i+j+1],先将进位num[i+j+1]%10累加到num[i+j]中,再将num[i+j+1]更新为num[i+j+1]%10。
第二步:
遍历数组num,去除前导0,将结果拼接起来并返回。
代码:
class Solution {public String multiply(String num1, String num2) {if(num1.equals("0") || num2.equals("0")){return "0";}int len1 = num1.length();int len2 = num2.length();int [] num = new int[len1+len2];for(int i = len1-1; i>=0; i--){int t = num1.charAt(i)-'0';for(int j = len2-1; j>=0; j--){int sum = t * (num2.charAt(j)-'0');num[i+j+1] += sum %10;num[i+j] += (num[i+j+1]/10 + sum /10);num[i+j+1] %= 10;}}StringBuilder sb = new StringBuilder("");int k = 0;//去除前导0while(num[k] == 0 && k<len1+len2){k++;}for(; k<len1+len2; k++){sb.append(num[k]);}return sb.toString();}
}
字符串相乘(给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。)相关推荐
- C++ ,leetcode 43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式
一.思路: 字符串逆序,然后遍历两个逆序后的字符串,然后对应的字符相乘,i+j等于它的位数. string multiply(string num1, string num2) {reverseStr ...
- 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 不能直接将输入的字符串转换为整数形式. 思路:将字符串从最小位进行相加,最后形成的字符串倒置 class Solution {pu ...
- 2021-10-20:分数到小数。给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。输入: num
2021-10-20:分数到小数.给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数.如果小数部分为循环小数,则将循环的部分括在括号内.输入: num ...
- 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
1.题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2" ...
- 随笔-给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和
题目:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 ...
- 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串...
1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 ...
- 云合智网 面试算法题 两个字符串相乘,例如“12345“ * “54321“,字符串不能直接转换为整型
题目 两个字符串相乘,例如"12345" * "54321",字符串不能直接转换为整型 public class StringMultiplication {p ...
- LeetCode||有效的字母异位词(排列)--给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词
原题链接:https://leetcode-cn.com/problems/valid-anagram 题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示 ...
- 算法019:字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
题目:字符串轮转.给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串).示例1:输入:s1 = "waterb ...
最新文章
- 模型优化的风向标:偏差与方差
- python多线程内存越要越大_Python 面试:这9个问题你一定要掌握!
- Django:文章详情页面评论功能需要登录后才能使用,登录后自动返回到文章详情页...
- VRML语法基础跟简介
- “分库分表 ?选型和流程要慎重,否则会失控
- 基数字符串排序c语言,基数排序(C语言)
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
- Java实现栈(顺序栈,链栈)
- 滑块 组件_组件制作:如何使用链接的输入创建滑块
- sqlserver oracle插件,SQLServer链接服务器至Oracle
- python实现汉诺塔程序
- 关于PHPExcel 导出下载表格,调试器响应乱码
- java单链表存储结构_Java数据结构——单链表
- c语言char aa 1000,char ** 与char * a[ ] 区别
- Android NDK学习(1) 简介
- Anylogic 创建一个简单的人口演变模型
- python脚本编程手册安卓版_python编程入门app下载
- 宽带拨号连接显示被远程计算机终止
- MySQL--通过mysqladmin命令修改密码提示:single quotes were not trimmed line client(Windows)
- border定义不同边框,虚线边框(dashed,dotted),实线边框(solid)