给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。

正确方法:结合算式相乘的思想

0     4

index      0     1    2      3      4

<---[p1   p2]

TIME:O(n*m)

SPACE:O(n+m)

 class Solution {
public String multiply(String num1, String num2) {
if(num1 == null || num2 == null)return "0";
int[] digits = new int[num1.length() + num2.length()];
for(int i = num1.length() - 1;i >= 0;i--){
for(int j = num2.length() - 1;j >= 0;j--){
int product = (num1.charAt(i) - '0' ) * (num2.charAt(j) - '0');
int p1 = i + j,p2 = i + j + 1;//乘完之后放在digit数组中的位置
int sum = product +digits[p2];
digits[p1] += sum / 10;
digits[p2] = sum % 10; //数组默认进行初始化为0
}
}
StringBuilder res = new StringBuilder();
//digits[0,0,1,0,3]
for(int digit : digits){
if(!(digit == 0 && res.length() == 0)){
res.append(digit);
}
}
return res.length() == 0 ? "0" : res.toString();
}
}

错误方法:当超出最大值时失效,改成double后,并去掉科学计数法,由于精度问题会出现结果错误

 class Solution {
public String multiply(String num1, String num2) {
long n1 = num1.charAt(num1.length()-1) - '0';
long n2 = num2.charAt(num2.length()-1) - '0';
num1 = new StringBuffer(num1).reverse().toString();
num2 = new StringBuffer(num2).reverse().toString();
System.out.println(num1);
for(int i = 1;i < num1.length();i++){
n1 += (num1.charAt(i) - '0') *Math.pow(10, i);
}
for(int i = 1;i < num2.length();i++){
n2 += (num2.charAt(i) - '0') *Math.pow(10, i);
}
return String.valueOf(n1 * n2);
}
}

17:25:54 17:26:00

最新文章

  1. mybatis插入的同时获取主键id
  2. poj 2019 二维rmq *
  3. 第一个PHP程序
  4. PHP_string
  5. [shell基础]——find命令
  6. 大脑提取每一个体素26领域的matlab代码
  7. Mongodb 条件查询
  8. 单个H扩展到多个H时,机器学习的保证
  9. 找回Git中丢失的Commit
  10. exp和imp的使用场合
  11. 51Nod 2006 飞行员配对(二分图最大匹配)
  12. JSP内置对象——out对象/request对象
  13. 《HTTP权威指南》学习笔记——HTTP报文
  14. vuejs中使用echart图表
  15. TopCoder客户端安装
  16. Error creating bean with name xxxx,xxxx must be provided
  17. ZJOI2015地震后的幻想乡
  18. Elastic Search 5.x Nest Multiple Queries C#
  19. HDU - 6133 启发式合并
  20. The hub and spoke model 轮辐模型/辐射模型

热门文章

  1. CSS - 视觉格式化模型(Visual formatting model)
  2. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第1节 Scanner类_3-Scanner的使用步骤
  3. Docker安装及部署实例.Net Core
  4. js面向对象程序设计之继承
  5. 宝塔 windows下apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件
  6. 003--PowerDesigner创建索引与外键
  7. JAVA的学习
  8. java jdk12,安装路径没有jre文件夹
  9. Java中 Json的使用
  10. 第一个javascript脚本