「每日LeetCode」2022年2月25日

本文最后更新于:2023年3月19日 晚上

537.复数乘法

537.复数乘法

Category Difficulty Likes Dislikes
algorithms Medium (71.41%) 88 -

Tags
Companies
复数 可以用字符串表示,遵循 “实部+虚部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 都是有效的复数表示。

Discussion | Solution

思路

正则取出对应位置的数,做乘法后返回即可

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @lc app=leetcode.cn id=537 lang=javascript
*
* [537] 复数乘法
*/

// @lc code=start
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var complexNumberMultiply = function (num1, num2) {
const reg = new RegExp(/((-)?([0-9]+))\+((-)?([0-9]+))i/);
const matches1 = reg.exec(num1);
const matches2 = reg.exec(num2);
const [realNum1, imaginaryNum1] = [+matches1[1], +matches1[4]];
const [realNum2, imaginaryNum2] = [+matches2[1], +matches2[4]];
const realNum = realNum1 * realNum2 - imaginaryNum1 * imaginaryNum2,
imaginaryNum = realNum1 * imaginaryNum2 + realNum2 * imaginaryNum1;
return `${realNum}+${imaginaryNum}i`;
};
// @lc code=end