携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
537. 复数乘法
复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件:
实部 是一个整数,取值范围是 [-100, 100] 虚部 也是一个整数,取值范围是 [-100, 100] i2 == -1 给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。
「示例1:」
输入:num1 = "1+1i", num2 = "1+1i"
输出:"0+2i"
解释:(1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。
「示例2:」
输入:num1 = "1+-1i", num2 = "1+-1i"
输出:"0+-2i"
解释:(1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。
「提示:」
num1 和 num2 都是有效的复数表示。
解题思路
方法一:
分别获取[a1, b1]和[a2, b2]
简单模拟,计算出新的a和b即可
方法二:
两个复数相乘,展开
实部、虚部对应相乘得到的是实部
实部与虚部交叉相乘,得到的是虚部
方法三:
正则表达式
方法四:
字符串解析成实部、虚部,然后应用多项式乘多项式展开,得到最终的实部、虚部
代码实现
// 方法一
const complexNumberMultiply = (num1, num2) => {
const [a1, b1] = getNum(num1);
const [a2, b2] = getNum(num2);
const a = a1 * a2 - b1 * b2;
const b = a1 * b2 + a2 * b1;
return `${a}+${b}i`
};
const getNum = strNum => {
const str = strNum.slice(0, strNum.length - 1);
const [a, b] = str.split('+');
return [Number(a), Number(b)];
};
// 方法二
var complexNumberMultiply = function(num1, num2) {
const str1 = num1.split('+'),str2 = num2.split('+');
const b = str1[0]*parseInt(str2[1]) + parseInt(str1[1])*str2[0],
a = str1[0]*str2[0]-parseInt(str1[1]) * parseInt(str2[1]);
return `${a}+${b}i`;
}
// 方法三
var complexNumberMultiply = function(a, b) {
let reg1 = /-?\d+/g, reg2 = /[+-]/g;
let arr1 = a.match(reg1), arr2 = b.match(reg1);
let ans = arr1[0]*arr2[0] - arr1[1]*arr2[1] + '+' + (arr1[0]*arr2[1] + arr1[1]*arr2[0] + 'i');
return ans;
};
// 方法四
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var complexNumberMultiply = function(num1, num2) {
convert = function(num) {
let isA = true, neg = false, a = 0, b = 0
for(let i = 0; i < num.length; i++)
if(num.charAt(i) == '-')
neg = true
else if(num.charAt(i) == '+' || num.charAt(i) == 'i') {
if(neg)
if(isA)
a *= -1
else
b *= -1
isA = neg = false
} else if(isA)
a = 10 * a + num.charCodeAt(i) - '0'.charCodeAt(0)
else
b = 10 * b + num.charCodeAt(i) - '0'.charCodeAt(0)
return [a, b]
}
const n1 = convert(num1), n2 = convert(num2)
return "" + (n1[0] * n2[0] - n1[1] * n2[1]) + "+" + (n1[1] * n2[0] + n1[0] * n2[1]) + "i"
};
如果你对这道题目还有疑问的话,可以在评论区进行留言;