Skip to content

537. 复数乘法

解题过程

INFO

题目链接 复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件: 实部 是一个整数,取值范围是 [-100, 100] 虚部 也是一个整数,取值范围是 [-100, 100] i2 == -1 给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串

javascript
/**
 * @link https://leetcode.cn/problems/complex-number-multiplication/
 * @title 537. 复数乘法
 * @description 复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件:
实部 是一个整数,取值范围是 [-100, 100]
虚部 也是一个整数,取值范围是 [-100, 100]
i2 == -1
给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
// 解法一
// 思路:本办法,直接拆开两个字符串为数组,然后分别计算对应的实部和虚部值即可
var complexNumberMultiply = function(num1, num2) {
  const complex1Arr = num1.split('+')
  const complex2Arr = num2.split('+')

  const i2 = parseInt(complex2Arr[1].split('i')[0]) * parseInt(complex1Arr[1].split('i')[0]) * (-1)
  const num = parseInt(complex1Arr[0]) * parseInt(complex2Arr[0]) + i2
  const iValue = parseInt(complex1Arr[0]) * parseInt(complex2Arr[1].split('i')[0]) + parseInt(complex2Arr[0]) * parseInt(complex1Arr[1].split('i')[0])
  return num + '+' + iValue + 'i'
}

// 解法二
// 思路:正则表达式匹配对应数字字符串的实部和虚部数字,然后对应相乘即可
// 优点:比解法一更简单和执行效果更好
var complexNumberMultiply = function(num1, num2) {
  const [a1, a2] = num1.match(/\d+|-\d+/g)
  const [b1, b2] = num2.match(/\d+|-\d+/g)

  const num = parseInt(a1) * parseInt(b1) - parseInt(a2) * parseInt(b2)
  const iNum = parseInt(a1) * parseInt(b2) + parseInt(b1) * parseInt(a2)
  return num + '+' + iNum + 'i'
}

// const result = complexNumberMultiply('1+1i', '1+1i') // 0+2i
// const result = complexNumberMultiply('1+-1i', '1+-1i') // 0+-2i
// const result = complexNumberMultiply('1+0i', '1+0i') // 1+0i
const result = complexNumberMultiply('78+-76i', '-86+72i') // "-1236+12152i"
console.log(result)

解题感受

解题思路都差不多,没有什么特别的。也搞不懂这题难度在哪里,为啥是中等类型。基本就是硬解即可,优化一点的话,用正则表达式会好很多,思路也比较清晰简单

优质题解