LeetCode#43. Multiply Strings
来源:互联网 发布:哈登15 16赛季数据 编辑:程序博客网 时间:2024/04/27 00:25
题目:给定两个整型的数用string表示: num1 num2,求num1和num2的乘积
思路:从低位到高位,num1与num2的每一位相乘,总共需要进行len1轮乘法;
难度:Medium
代码:
public class Solution { //计算两个数的乘积 public String multiply(String num1, String num2) { if(num1.length() == 0 || num2.length() == 0 || num1 == null || num2 == null){ return ""; } //如果num1或num2为空,则直接返回“0” if(num1.equals("0") || num2.equals("0")){ return "0"; } StringBuilder resultStr = new StringBuilder(""); int len1 = num1.length(); int len2 = num2.length(); int[] result = new int[len1+len2]; int k = len1; while(k > 0){ int carry = 0; for(int i = len2-1; i >= 0; i--){ int temp = Character.getNumericValue(num1.charAt(k-1)) * Character.getNumericValue(num2.charAt(i)) + carry; carry = (result[i+k]+temp)/10; result[i+k] = (result[i+k] + temp)%10; } k--; result[k] = result[k] + carry;//每一轮乘完可能需要进位,这一行代码就是存进位的值 } //去掉最高位为0 int j = 0; if(result[0] == 0){ j = 1; } for(int i = j; i < len1+len2; i++){ resultStr.append(result[i]); System.out.print(result[i]); } //return Arrays.toString(result); return resultStr.toString(); }}
- 来自Discuss里的解法(超级机智好吗!!!)
public 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'); 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(); //if里的判断就可以把高位0都去掉 for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p); return sb.length() == 0 ? "0" : sb.toString();}
总结Java中char转int的两种方法
1. int value = Character.getNumericValue(char c)2. int value = c - '0'
总结数组转成string[1, 3, 5]
1. StringBuilder.append() + 数组遍历(string结果为:135)2. Arrays.toString(arr) (输出结果:[1, 3, 5])注意以上两种方法输出结果的不同!!!!!
0 0
- [LeetCode]43.Multiply Strings
- LeetCode --- 43. Multiply Strings
- [Leetcode] 43. Multiply Strings
- [leetcode] 43.Multiply Strings
- 43. Multiply Strings LeetCode
- leetcode 43. Multiply Strings
- LeetCode 43. Multiply Strings
- LeetCode 43. Multiply Strings
- LeetCode 43. Multiply Strings
- [leetcode] 43. Multiply Strings
- Leetcode 43. Multiply Strings
- (Leetcode)43. Multiply Strings
- LeetCode - 43. Multiply Strings
- leetcode 43. Multiply Strings
- [LeetCode] 43. Multiply Strings
- leetcode 43. Multiply Strings
- Leetcode 43. Multiply Strings
- leetcode 43. Multiply Strings
- Java并发编程(二)--线程池
- __initialize()和类的构造函数__construct()
- [译]Android Weekly 250期优秀库与代码
- Python工具-pdfkit
- 使用Docker容器来源码编译etcd
- LeetCode#43. Multiply Strings
- STL无序容器之unordered_map
- j_link管脚定义
- php 框架选择(我对各框架的了解还不够深入,后续再完善)
- dwz IE兼容问题之图片回显与下拉滚动条消失
- leetcode134. Gas Station
- 好玩的editText
- 设计模式——工厂模式
- Unity中的Path对应各平台中的Path