Skip to content

Commit b794dee

Browse files
committed
feat: update solutions to lc problem: No.0537
No.0537.Complex Number Multiplication
1 parent 173bc81 commit b794dee

File tree

7 files changed

+79
-101
lines changed

7 files changed

+79
-101
lines changed

solution/0500-0599/0537.Complex Number Multiplication/README.md

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,11 @@ tags:
6060

6161
<!-- solution:start -->
6262

63-
### 方法一
63+
### 方法一:模拟
64+
65+
我们可以将复数字符串转换成对应的实部 $a$ 和虚部 $b$,然后根据复数乘法的公式 $(a_1 + b_1i) \times (a_2 + b_2i) = (a_1a_2 - b_1b_2) + (a_1b_2 + a_2b_1)i$ 计算出结果。
66+
67+
时间复杂度 $O(1)$,空间复杂度 $O(1)$。
6468

6569
<!-- tabs:start -->
6670

@@ -69,23 +73,25 @@ tags:
6973
```python
7074
class Solution:
7175
def complexNumberMultiply(self, num1: str, num2: str) -> str:
72-
a, b = map(int, num1[:-1].split('+'))
73-
c, d = map(int, num2[:-1].split('+'))
74-
return f'{a * c - b * d}+{a * d + c * b}i'
76+
a1, b1 = map(int, num1[:-1].split("+"))
77+
a2, b2 = map(int, num2[:-1].split("+"))
78+
return f"{a1 * a2 - b1 * b2}+{a1 * b2 + a2 * b1}i"
7579
```
7680

7781
#### Java
7882

7983
```java
8084
class Solution {
8185
public String complexNumberMultiply(String num1, String num2) {
82-
String[] c1 = num1.split("\\+|i");
83-
String[] c2 = num2.split("\\+|i");
84-
int a = Integer.parseInt(c1[0]);
85-
int b = Integer.parseInt(c1[1]);
86-
int c = Integer.parseInt(c2[0]);
87-
int d = Integer.parseInt(c2[1]);
88-
return String.format("%d+%di", a * c - b * d, a * d + c * b);
86+
int[] x = parse(num1);
87+
int[] y = parse(num2);
88+
int a1 = x[0], b1 = x[1], a2 = y[0], b2 = y[1];
89+
return (a1 * a2 - b1 * b2) + "+" + (a1 * b2 + a2 * b1) + "i";
90+
}
91+
92+
private int[] parse(String s) {
93+
var cs = s.substring(0, s.length() - 1).split("\\+");
94+
return new int[] {Integer.parseInt(cs[0]), Integer.parseInt(cs[1])};
8995
}
9096
}
9197
```
@@ -96,43 +102,31 @@ class Solution {
96102
class Solution {
97103
public:
98104
string complexNumberMultiply(string num1, string num2) {
99-
int a, b, c, d;
100-
sscanf(num1.c_str(), "%d+%di", &a, &b);
101-
sscanf(num2.c_str(), "%d+%di", &c, &d);
102-
return string(to_string(a * c - b * d) + "+" + to_string(a * d + c * b) + "i");
105+
int a1, b1, a2, b2;
106+
sscanf(num1.c_str(), "%d+%di", &a1, &b1);
107+
sscanf(num2.c_str(), "%d+%di", &a2, &b2);
108+
return to_string(a1 * a2 - b1 * b2) + "+" + to_string(a1 * b2 + a2 * b1) + "i";
103109
}
104110
};
105111
```
106112
107113
#### Go
108114
109115
```go
110-
func complexNumberMultiply(num1, num2 string) string {
111-
parse := func(num string) (a, b int) {
112-
i := strings.IndexByte(num, '+')
113-
a, _ = strconv.Atoi(num[:i])
114-
b, _ = strconv.Atoi(num[i+1 : len(num)-1])
115-
return
116-
}
117-
a, b := parse(num1)
118-
c, d := parse(num2)
119-
return fmt.Sprintf("%d+%di", a*c-b*d, a*d+b*c)
116+
func complexNumberMultiply(num1 string, num2 string) string {
117+
x, _ := strconv.ParseComplex(num1, 64)
118+
y, _ := strconv.ParseComplex(num2, 64)
119+
return fmt.Sprintf("%d+%di", int(real(x*y)), int(imag(x*y)))
120120
}
121121
```
122122

123123
#### TypeScript
124124

125125
```ts
126126
function complexNumberMultiply(num1: string, num2: string): string {
127-
let arr1 = num1.split('+'),
128-
arr2 = num2.split('+');
129-
let r1 = Number(arr1[0]),
130-
r2 = Number(arr2[0]);
131-
let v1 = Number(arr1[1].substring(0, arr1[1].length - 1)),
132-
v2 = Number(arr2[1].substring(0, arr2[1].length - 1));
133-
let ansR = r1 * r2 - v1 * v2;
134-
let ansV = r1 * v2 + r2 * v1;
135-
return `${ansR}+${ansV}i`;
127+
const [a1, b1] = num1.slice(0, -1).split('+').map(Number);
128+
const [a2, b2] = num2.slice(0, -1).split('+').map(Number);
129+
return `${a1 * a2 - b1 * b2}+${a1 * b2 + a2 * b1}i`;
136130
}
137131
```
138132

solution/0500-0599/0537.Complex Number Multiplication/README_EN.md

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ tags:
5858

5959
<!-- solution:start -->
6060

61-
### Solution 1
61+
### Solution 1: Simulation
62+
63+
We can convert the complex number string into its real part $a$ and imaginary part $b$, and then use the formula for complex number multiplication $(a_1 + b_1i) \times (a_2 + b_2i) = (a_1a_2 - b_1b_2) + (a_1b_2 + a_2b_1)i$ to calculate the result.
64+
65+
The time complexity is $O(1)$, and the space complexity is $O(1)$.
6266

6367
<!-- tabs:start -->
6468

@@ -67,23 +71,25 @@ tags:
6771
```python
6872
class Solution:
6973
def complexNumberMultiply(self, num1: str, num2: str) -> str:
70-
a, b = map(int, num1[:-1].split('+'))
71-
c, d = map(int, num2[:-1].split('+'))
72-
return f'{a * c - b * d}+{a * d + c * b}i'
74+
a1, b1 = map(int, num1[:-1].split("+"))
75+
a2, b2 = map(int, num2[:-1].split("+"))
76+
return f"{a1 * a2 - b1 * b2}+{a1 * b2 + a2 * b1}i"
7377
```
7478

7579
#### Java
7680

7781
```java
7882
class Solution {
7983
public String complexNumberMultiply(String num1, String num2) {
80-
String[] c1 = num1.split("\\+|i");
81-
String[] c2 = num2.split("\\+|i");
82-
int a = Integer.parseInt(c1[0]);
83-
int b = Integer.parseInt(c1[1]);
84-
int c = Integer.parseInt(c2[0]);
85-
int d = Integer.parseInt(c2[1]);
86-
return String.format("%d+%di", a * c - b * d, a * d + c * b);
84+
int[] x = parse(num1);
85+
int[] y = parse(num2);
86+
int a1 = x[0], b1 = x[1], a2 = y[0], b2 = y[1];
87+
return (a1 * a2 - b1 * b2) + "+" + (a1 * b2 + a2 * b1) + "i";
88+
}
89+
90+
private int[] parse(String s) {
91+
var cs = s.substring(0, s.length() - 1).split("\\+");
92+
return new int[] {Integer.parseInt(cs[0]), Integer.parseInt(cs[1])};
8793
}
8894
}
8995
```
@@ -94,43 +100,31 @@ class Solution {
94100
class Solution {
95101
public:
96102
string complexNumberMultiply(string num1, string num2) {
97-
int a, b, c, d;
98-
sscanf(num1.c_str(), "%d+%di", &a, &b);
99-
sscanf(num2.c_str(), "%d+%di", &c, &d);
100-
return string(to_string(a * c - b * d) + "+" + to_string(a * d + c * b) + "i");
103+
int a1, b1, a2, b2;
104+
sscanf(num1.c_str(), "%d+%di", &a1, &b1);
105+
sscanf(num2.c_str(), "%d+%di", &a2, &b2);
106+
return to_string(a1 * a2 - b1 * b2) + "+" + to_string(a1 * b2 + a2 * b1) + "i";
101107
}
102108
};
103109
```
104110
105111
#### Go
106112
107113
```go
108-
func complexNumberMultiply(num1, num2 string) string {
109-
parse := func(num string) (a, b int) {
110-
i := strings.IndexByte(num, '+')
111-
a, _ = strconv.Atoi(num[:i])
112-
b, _ = strconv.Atoi(num[i+1 : len(num)-1])
113-
return
114-
}
115-
a, b := parse(num1)
116-
c, d := parse(num2)
117-
return fmt.Sprintf("%d+%di", a*c-b*d, a*d+b*c)
114+
func complexNumberMultiply(num1 string, num2 string) string {
115+
x, _ := strconv.ParseComplex(num1, 64)
116+
y, _ := strconv.ParseComplex(num2, 64)
117+
return fmt.Sprintf("%d+%di", int(real(x*y)), int(imag(x*y)))
118118
}
119119
```
120120

121121
#### TypeScript
122122

123123
```ts
124124
function complexNumberMultiply(num1: string, num2: string): string {
125-
let arr1 = num1.split('+'),
126-
arr2 = num2.split('+');
127-
let r1 = Number(arr1[0]),
128-
r2 = Number(arr2[0]);
129-
let v1 = Number(arr1[1].substring(0, arr1[1].length - 1)),
130-
v2 = Number(arr2[1].substring(0, arr2[1].length - 1));
131-
let ansR = r1 * r2 - v1 * v2;
132-
let ansV = r1 * v2 + r2 * v1;
133-
return `${ansR}+${ansV}i`;
125+
const [a1, b1] = num1.slice(0, -1).split('+').map(Number);
126+
const [a2, b2] = num2.slice(0, -1).split('+').map(Number);
127+
return `${a1 * a2 - b1 * b2}+${a1 * b2 + a2 * b1}i`;
134128
}
135129
```
136130

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
class Solution {
22
public:
33
string complexNumberMultiply(string num1, string num2) {
4-
int a, b, c, d;
5-
sscanf(num1.c_str(), "%d+%di", &a, &b);
6-
sscanf(num2.c_str(), "%d+%di", &c, &d);
7-
return string(to_string(a * c - b * d) + "+" + to_string(a * d + c * b) + "i");
4+
int a1, b1, a2, b2;
5+
sscanf(num1.c_str(), "%d+%di", &a1, &b1);
6+
sscanf(num2.c_str(), "%d+%di", &a2, &b2);
7+
return to_string(a1 * a2 - b1 * b2) + "+" + to_string(a1 * b2 + a2 * b1) + "i";
88
}
99
};
Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
1-
func complexNumberMultiply(num1, num2 string) string {
2-
parse := func(num string) (a, b int) {
3-
i := strings.IndexByte(num, '+')
4-
a, _ = strconv.Atoi(num[:i])
5-
b, _ = strconv.Atoi(num[i+1 : len(num)-1])
6-
return
7-
}
8-
a, b := parse(num1)
9-
c, d := parse(num2)
10-
return fmt.Sprintf("%d+%di", a*c-b*d, a*d+b*c)
1+
func complexNumberMultiply(num1 string, num2 string) string {
2+
x, _ := strconv.ParseComplex(num1, 64)
3+
y, _ := strconv.ParseComplex(num2, 64)
4+
return fmt.Sprintf("%d+%di", int(real(x*y)), int(imag(x*y)))
115
}
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
class Solution {
22
public String complexNumberMultiply(String num1, String num2) {
3-
String[] c1 = num1.split("\\+|i");
4-
String[] c2 = num2.split("\\+|i");
5-
int a = Integer.parseInt(c1[0]);
6-
int b = Integer.parseInt(c1[1]);
7-
int c = Integer.parseInt(c2[0]);
8-
int d = Integer.parseInt(c2[1]);
9-
return String.format("%d+%di", a * c - b * d, a * d + c * b);
3+
int[] x = parse(num1);
4+
int[] y = parse(num2);
5+
int a1 = x[0], b1 = x[1], a2 = y[0], b2 = y[1];
6+
return (a1 * a2 - b1 * b2) + "+" + (a1 * b2 + a2 * b1) + "i";
7+
}
8+
9+
private int[] parse(String s) {
10+
var cs = s.substring(0, s.length() - 1).split("\\+");
11+
return new int[] {Integer.parseInt(cs[0]), Integer.parseInt(cs[1])};
1012
}
1113
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Solution:
22
def complexNumberMultiply(self, num1: str, num2: str) -> str:
3-
a, b = map(int, num1[:-1].split('+'))
4-
c, d = map(int, num2[:-1].split('+'))
5-
return f'{a * c - b * d}+{a * d + c * b}i'
3+
a1, b1 = map(int, num1[:-1].split("+"))
4+
a2, b2 = map(int, num2[:-1].split("+"))
5+
return f"{a1 * a2 - b1 * b2}+{a1 * b2 + a2 * b1}i"
Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
function complexNumberMultiply(num1: string, num2: string): string {
2-
let arr1 = num1.split('+'),
3-
arr2 = num2.split('+');
4-
let r1 = Number(arr1[0]),
5-
r2 = Number(arr2[0]);
6-
let v1 = Number(arr1[1].substring(0, arr1[1].length - 1)),
7-
v2 = Number(arr2[1].substring(0, arr2[1].length - 1));
8-
let ansR = r1 * r2 - v1 * v2;
9-
let ansV = r1 * v2 + r2 * v1;
10-
return `${ansR}+${ansV}i`;
2+
const [a1, b1] = num1.slice(0, -1).split('+').map(Number);
3+
const [a2, b2] = num2.slice(0, -1).split('+').map(Number);
4+
return `${a1 * a2 - b1 * b2}+${a1 * b2 + a2 * b1}i`;
115
}

0 commit comments

Comments
 (0)