1. 问题描述:
复数可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件:
- 实部是一个整数,取值范围是 [-100, 100]
- 虚部也是一个整数,取值范围是 [-100, 100]
i ^ 2 == -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 都是有效的复数表示。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/complex-number-multiplication
2. 思路分析:
分析题目可以知道我们根据复数的运算规则计算表达式的值即可,复数乘法的运算规则为:
(a + bi) * (c + di) = (ac + bd) + (ad + bc)i
所以我们的关键是根据已知的字符串得到上面表达式对应的a,b,c,d的值然后计算表达式的值即可。因为使用的是python语言所以可以使用split函数以"+"作为分隔符号分隔字符串的实部与虚部,然后再得到虚部对应的c,d数值最终就可以得到a,b,c,d的值。
3. 代码如下:
class Solution:
# 得到虚部对应的数值
def change(self, s):
i = 0
res = ""
while i < len(s):
c = s[i]
if c != "i":
res += c
else:
break
i += 1
return int(res)
# 主要是复数的运算规则
def complexNumberMultiply(self, x: str, y: str) -> str:
# 按照"+"得到复数分隔之后的实部与虚部
x0 = x.split("+")
y0 = y.split("+")
a, c = int(x0[0]), int(y0[0])
# 得到虚部对应的数值
b = self.change(x0[1])
d = self.change(y0[1])
# 返回计算结果
return str(a * c - b * d) + "+" + str(a * d + b * c) + "i"