您的位置:首页 > 编程语言 > Java开发

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.

思路:通过一位乘法和字符串加法实现,注意进位问题,注意字符串方向问题。

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: