LeetCode : Multiply Strings (java)
2016-04-08 01:22
393 查看
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.
思路:通过一位乘法和字符串加法实现,注意进位问题,注意字符串方向问题。
Note: The numbers can be arbitrarily large and are non-negative.
思路:通过一位乘法和字符串加法实现,注意进位问题,注意字符串方向问题。
public class Solution { public String multiply(String num1, String num2) { String result = ""; for (int i = num2.length() - 1; i >= 0; i--) { result = add(result, subMultiply(num1, num2.charAt(i), num2.length() - i - 1)); } // 去掉高位0,翻转字符串 StringBuilder sb = new StringBuilder(); int count = result.length() - 1; for (; count >= 0; count--) { if (result.charAt(count) != '0') { break; } } for (; count >= 0; count--) { sb.append(result.charAt(count)); } return sb.toString().length() == 0 ? "0" : sb.toString(); } // 反向结果字符串 public String subMultiply(String num, char n, int depth) { String result = ""; for (int i = 0; i < depth; i++) { result += "0"; } int num2 = n - '0'; int over = 0; for (int i = num.length() - 1; i >= 0; i--) { int num1 = num.charAt(i) - '0'; int tmp = num1 * num2 + over; over = 0; if (tmp > 9) { over = tmp / 10; tmp = tmp % 10; } result += tmp; } if (over != 0) { result += over; } return result; } // 反向求和 public String add(String num1, String num2) { String result = ""; int i = 0; int over = 0; while (i < num1.length() && i < num2.length()) { int a = num1.charAt(i) - '0'; int b = num2.charAt(i) - '0'; int tmp = a + b + over; over = 0; if (tmp > 9) { over = tmp / 10; tmp = tmp % 10; } result += tmp; i++; } while (i < num1.length()) { int a = num1.charAt(i) - '0'; int tmp = a + over; over = 0; if (tmp > 9) { over = tmp / 10; tmp = tmp % 10; } result += tmp; i++; } while (i < num2.length()) { int b = num2.charAt(i) - '0'; int tmp = b + over; over = 0; if (tmp > 9) { over = tmp / 10; tmp = tmp % 10; } result += tmp; i++; } if (over != 0) { result += over; } return result; } }
相关文章推荐
- Jdk 6260652 Bug
- java 处理系统时间(转载)
- java学习之路之数据库知识总结
- Java中与时间相关的几个类(Date、Calendar、SimpleDateFormat)
- Java语言基础(数组)
- [Java]SerialZable接口的使用
- eclipse 使用gradle构建系统时候报错
- Java 日历的制作 心得 写给自己
- java基础-----2016.4.8
- 海康SDK-javademo实现
- Java 加载配置文件的方式
- eclipse开发环境搭建
- SpringMVC - controller中获取session
- 初识java,编写hello world语句
- Java开发者值得关注的7款新工具
- 5个强大的Java分布式缓存框架推荐
- 21. Merge Two Sorted Lists | Java最短代码实现
- JavaWEB 通过Listener理解域对象生命周期
- Java Math的floor、ceil、round方法
- MyEclipse 快捷键