diff --git a/README.md b/README.md index 4a8a757..0941c58 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ 1组:193 -2组:537 +2组:537 [537-复数乘法](details/537-复数乘法.md) 3组:402 diff --git "a/details/537-\345\244\215\346\225\260\344\271\230\346\263\225.md" "b/details/537-\345\244\215\346\225\260\344\271\230\346\263\225.md" new file mode 100644 index 0000000..8c540f1 --- /dev/null +++ "b/details/537-\345\244\215\346\225\260\344\271\230\346\263\225.md" @@ -0,0 +1,93 @@ +## [复数乘法](https://leetcode-cn.com/problems/complex-number-multiplication/description/) + + +给定两个表示复数的字符串。 + +返回表示它们乘积的字符串。注意,根据定义 i2= -1 。 + +##### 示例 1: + +输入: "1+1i", "1+1i" +输出: "0+2i" +解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。 + +##### 示例 2: + +输入: "1+-1i", "1+-1i" +输出: "0+-2i" +解释: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。 + +##### 说明: + +输入字符串不包含额外的空格。 +输入字符串将以 a+bi 的形式给出,其中整数 a 和 b 的范围均在 [-100, 100] 之间。输出也应当符合这种形式。 + +##### 注意: + +1.如果用一般直接的算法,逐个计算、判断非常耗时。 +2.针对一些特殊值,要进行容错处理。 + +## 解法 + +1.考察过题目后,基本思路为两个一元一次方程相乘,相乘所以的i2=-1,进行简化,最后所得还是一元一次方程。 + + +### java版本 + +1.通过符号“+”,分割方程式,通过one,two,three,four设置对应的数值,然后进行计算 +``` +class Solution { +public String complexNumberMultiply(String a, String b) { +String[] leftStringArray = a.split("\\+"); +String[] rightStringArray = b.split("\\+"); + +int one = Integer.parseInt(leftStringArray[0]); +int two = Integer.parseInt(leftStringArray[1].split("i")[0]); + +int three = Integer.parseInt(rightStringArray[0]); +int four = Integer.parseInt(rightStringArray[1].split("i")[0]); + +int numberShi = one * three + two * four * -1; +int numberXu = one * four + two * three; +return numberShi + "+"+numberXu+"i"; +} +} +``` +### swift版本 + + +定义一个结构体,来处理保存方程的对应内容。 +将方程式分解为可使用的整数类型。区分是不带有i的为resutA,带有i的为resutB +``` +struct vector { +var resutA: Int = 1; +var resutB: Int = 1; + +init(param: String) { +let array = param.split(separator: "+") +guard array.count == 2 else { +return +} +resutA = Int(array.first ?? "") ?? 0 +var temp: String = String(array.last ?? "") +temp = String(temp.prefix(temp.count-1)) +resutB = Int(temp) ?? 0 +} +} +``` + +``` +func complexNumberMultiply(_ a: String, _ b: String) -> String { +//使用结构体分解方程式, +let v1 = vector(param: a) +let v2 = vector(param: b) + +//执行两个方程 相乘的逻辑。 +let resultA = v1.resutA*v2.resutA +let resultB = v1.resutA*v2.resutB + v1.resutB*v2.resutA +let resutlC = v1.resutB*v2.resutB + +return "\(resultA-resutlC)+\(resultB)i" +} +``` +