Skip to content
Open

537 #25

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

1组:193

2组:537
2组:537 [537-复数乘法](details/537-复数乘法.md)

3组:402

Expand Down
93 changes: 93 additions & 0 deletions details/537-复数乘法.md
Original file line number Diff line number Diff line change
@@ -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"
}
```