题目描述
给定两个表示复数的字符串。
返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。
样例
输入: "1+1i", "1+1i"
输出: "0+2i"
解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。
输入: "1+-1i", "1+-1i"
输出: "0+-2i"
解释: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。
算法1
$O(n)$
1.将输入的两个整数直接拆分成实部和虚部进行计算
2.按法则计算出最后的实部和虚部结果,拼接
时间复杂度分析:O(n)
Java 代码
class Solution {
public String complexNumberMultiply(String a, String b) {
int[] aNum = getComplexNumber(a);
int[] bNum = getComplexNumber(b);
StringBuilder ans = new StringBuilder();
ans.append(aNum[0] * bNum[0] - aNum[1] * bNum[1]);
ans.append("+");
ans.append(aNum[0] * bNum[1] + aNum[1] * bNum[0]);
ans.append("i");
return ans.toString();
}
public int[] getComplexNumber(String a){
int[] ans = new int[2];
int aOpIndex = a.indexOf("+");
if(a.charAt(0) == '-'){
ans[0] = -1*getNum(a,1,aOpIndex-1);
} else {
ans[0] = getNum(a,0,aOpIndex-1);
}
if(a.charAt(aOpIndex+1) == '-'){
ans[1] = -1*getNum(a,aOpIndex+2,a.length()-2);
} else {
ans[1] = getNum(a,aOpIndex+1,a.length()-2);
}
return ans;
}
public int getNum(String str,int s,int e){
int ans = 0;
while(s <= e){
ans = ans*10 + (str.charAt(s)-'0');
s++;
}
return ans;
}
}