From adc18b21ff753016412ac76a8f10f289978546df Mon Sep 17 00:00:00 2001 From: yaoyao <595133914@qq.com> Date: Sat, 17 Nov 2018 13:43:47 +0800 Subject: [PATCH 1/2] 537 --- README.md | 2 +- ...15\346\225\260\344\271\230\346\263\225.md" | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 "details/537-\345\244\215\346\225\260\344\271\230\346\263\225.md" 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..c772325 --- /dev/null +++ "b/details/537-\345\244\215\346\225\260\344\271\230\346\263\225.md" @@ -0,0 +1,71 @@ +## [复数乘法](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,进行简化,最后所得还是一元一次方程。 + +### 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" +} +``` + From 65dfeb5d58efb4dbafa69e5de906dc2d1e778dd3 Mon Sep 17 00:00:00 2001 From: yaoyao <595133914@qq.com> Date: Thu, 22 Nov 2018 10:43:51 +0800 Subject: [PATCH 2/2] 537 --- ...15\346\225\260\344\271\230\346\263\225.md" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) 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" index c772325..8c540f1 100644 --- "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" @@ -31,6 +31,28 @@ 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版本