[LeetCode][Java] Multiply Strings
2015-07-13 17:45
603 查看
题目:
Given two numbers represented as strings, return multiplication of the numbers as a string.Note: The numbers can be arbitrarily large and are non-negative.
题意:
给定两个数字分别用字符串表示出来,返回这两个数字的乘积,同样用字符串表示。注意:数字会非常大而且是非负的。
算法分析:
方法一:直接乘会溢出,这里可以利用java中的 BigInteger
方法二:
参考http://pisxw.com/algorithm/Multiply-Strings.html
该题需要知道,
m和
n位数的乘积,最终结果为
m+n-1位或是
m+n位(进位时)。乘法计算中可以发现,结果中第
i位,应该由第一个字符串中的第
1位乘以第二个字符串中的第
i位,第一个字符串中的第
2位乘以第二个字符串中的第
i-1位,.......第一个字符串中的第
i位乘以第二个字符串中的第
1位,最后累加求得,最后我们取个位上的数值,然后剩下的作为进位放到下一轮循环中
AC代码:
方法一:import java.math.BigInteger; //Java public class Solution { public String multiply(String num1, String num2) { BigInteger temp1 = new BigInteger(num1); BigInteger temp2 = new BigInteger(num2); BigInteger result = temp1.multiply(temp2); return result.toString(); } }
方法二:
public class Solution { public String multiply(String num1, String num2) { if(num1==null || num2==null) return ""; if(num1.charAt(0)=='0') return "0"; if(num2.charAt(0)=='0') return "0"; int num1length=num1.length(); int num2length=num2.length(); //分别对两个开始字符串进行转置,便于后面的下标遍历 num1=new StringBuilder(num1).reverse().toString(); num2=new StringBuilder(num2).reverse().toString(); StringBuilder res=new StringBuilder(); int jinwei=0; //从低位开始计算,最后乘积的位数为m+n-1,如果进位则是m+n for(int i=0;i<num1length+num2length-1;i++) { int multi=jinwei; for(int j=0;j<=i;j++) { if(j<num1length && (i-j)<num2length) { multi+=(num1.charAt(j)-'0')*(num2.charAt(i-j)-'0'); } } res.append(multi%10); jinwei=multi/10; } //考虑最后一位是否有进位 if(jinwei!=0) res.append(jinwei); return res.reverse().toString(); } }
相关文章推荐
- 关于springMVC转换json出现的异常
- 关于springMVC转换json出现的异常
- ExecutorService与Executors例子的简单剖析
- JAVA实现DAO基本层CRUD操作
- 一个适合初学者看的java开发环境搭建
- 获取java native函数signature的快捷方法--javap工具
- Java图像拼接处理
- Android Studio,Eclipse常用快捷键中英文对照
- Java反编译插件
- Eclipse自定义keystore
- JDK安装与环境变量配置
- Java的设计六大原则
- myeclipes-----java文件中文乱码
- Spring的历史论(数据脱敏)
- 初学者很实用:struts2中将jsp数据传到action的几种方式
- java学习之城市包围农村
- 基于SpringMVC的web应用的ContextLoaderListener与DispatcherServlet标准组合配置
- java中的常量
- 趣味算法之怎样订饭最省钱
- java从入门到JUnit到maven