Skip to content

Commit 6ca5b5d

Browse files
committedJan 10, 2021
feat: add python and java solutions to leetcode problems
1 parent 83e2f4a commit 6ca5b5d

File tree

9 files changed

+118
-26
lines changed

9 files changed

+118
-26
lines changed
 

‎README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@
112112
### 数学
113113

114114
- [只出现一次的数字](/solution/0100-0199/0136.Single%20Number/README.md)
115-
- [数组中数字出现的次数](/lcof/面试题56%20-%20I.%20数组中数字出现的次数/README.md)
116-
- [数组中数字出现的次数 II](/lcof/面试题56%20-%20II.%20数组中数字出现的次数%20II/README.md)
115+
- [只出现一次的数字 II](/solution/0100-0199/0137.Single%20Number%20II/README.md)
116+
- [只出现一次的数字 III](/solution/0200-0299/0260.Single%20Number%20III/README.md)
117117
- [错误的集合](/solution/0600-0699/0645.Set%20Mismatch/README.md)
118118
- [二进制中 1 的个数](/lcof/面试题15.%20二进制中1的个数/README.md)
119119
- [计数质数](/solution/0200-0299/0204.Count%20Primes/README.md)

‎README_EN.md

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
106106
### Math
107107

108108
- [Single Number](/solution/0100-0199/0136.Single%20Number/README_EN.md)
109+
- [Single Number II](/solution/0100-0199/0137.Single%20Number%20II/README_EN.md)
110+
- [Single Number III](/solution/0200-0299/0260.Single%20Number%20III/README_EN.md)
109111
- [Set Mismatch](/solution/0600-0699/0645.Set%20Mismatch/README_EN.md)
110112
- [Count Primes](/solution/0200-0299/0204.Count%20Primes/README_EN.md)
111113
- [Missing Number](/solution/0200-0299/0268.Missing%20Number/README_EN.md)

‎solution/0100-0199/0137.Single Number II/README.md

+13-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,19 @@
3535
<!-- 这里可写当前语言的特殊实现逻辑 -->
3636

3737
```python
38-
38+
class Solution:
39+
def singleNumber(self, nums: List[int]) -> int:
40+
bits = [0] * 32
41+
for num in nums:
42+
for i in range(32):
43+
bits[i] += (num & 1)
44+
num >>= 1
45+
res = 0
46+
for i in range(32):
47+
if bits[i] % 3 != 0:
48+
res += (1 << i)
49+
# 如果为负数,先将 0-32 位取反(即 res ^ 0xffffffff ),再将所有位取反(即 ~ )
50+
return res if bits[31] % 3 == 0 else ~(res ^ 0xffffffff)
3951
```
4052

4153
### **Java**

‎solution/0100-0199/0137.Single Number II/README_EN.md

+12-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,18 @@
3535
### **Python3**
3636

3737
```python
38-
38+
class Solution:
39+
def singleNumber(self, nums: List[int]) -> int:
40+
bits = [0] * 32
41+
for num in nums:
42+
for i in range(32):
43+
bits[i] += (num & 1)
44+
num >>= 1
45+
res = 0
46+
for i in range(32):
47+
if bits[i] % 3 != 0:
48+
res += (1 << i)
49+
return res if bits[31] % 3 == 0 else ~(res ^ 0xffffffff)
3950
```
4051

4152
### **Java**
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
class Solution:
2-
def singleNumber(self, nums):
3-
"""
4-
:type nums: List[int]
5-
:rtype: int
6-
"""
7-
temp=set(nums)
8-
res=(sum(temp)*3-sum(nums))//2
9-
return res
2+
def singleNumber(self, nums: List[int]) -> int:
3+
bits = [0] * 32
4+
for num in nums:
5+
for i in range(32):
6+
bits[i] += (num & 1)
7+
num >>= 1
8+
res = 0
9+
for i in range(32):
10+
if bits[i] % 3 != 0:
11+
res += (1 << i)
12+
return res if bits[31] % 3 == 0 else ~(res ^ 0xffffffff)

‎solution/0200-0299/0260.Single Number III/README.md

+29-2
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,42 @@
3030
<!-- 这里可写当前语言的特殊实现逻辑 -->
3131

3232
```python
33-
33+
class Solution:
34+
def singleNumber(self, nums: List[int]) -> List[int]:
35+
xor = 0
36+
for num in nums:
37+
xor ^= num
38+
# x & (-x) 是保留位中最右边 1 ,且将其余的 1 设位 0 的方法
39+
diff = xor & (-xor)
40+
a = b = 0
41+
for num in nums:
42+
if (num & diff) == 0:
43+
a ^= num
44+
else:
45+
b ^= num
46+
return [a, b]
3447
```
3548

3649
### **Java**
3750

3851
<!-- 这里可写当前语言的特殊实现逻辑 -->
3952

4053
```java
41-
54+
class Solution {
55+
public int[] singleNumber(int[] nums) {
56+
int xor = 0;
57+
for (int num : nums) {
58+
xor ^= num;
59+
}
60+
int diff = xor & (-xor);
61+
int a = 0, b = 0;
62+
for (int num : nums) {
63+
if ((num & diff) == 0) a ^= num;
64+
else b ^= num;
65+
}
66+
return new int[]{a, b};
67+
}
68+
}
4269
```
4370

4471
### **...**

‎solution/0200-0299/0260.Single Number III/README_EN.md

+28-1
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,40 @@
2828
### **Python3**
2929

3030
```python
31+
class Solution:
32+
def singleNumber(self, nums: List[int]) -> List[int]:
33+
xor = 0
34+
for num in nums:
35+
xor ^= num
36+
diff = xor & (-xor)
37+
a = b = 0
38+
for num in nums:
39+
if (num & diff) == 0:
40+
a ^= num
41+
else:
42+
b ^= num
43+
return [a, b]
3144

3245
```
3346

3447
### **Java**
3548

3649
```java
37-
50+
class Solution {
51+
public int[] singleNumber(int[] nums) {
52+
int xor = 0;
53+
for (int num : nums) {
54+
xor ^= num;
55+
}
56+
int diff = xor & (-xor);
57+
int a = 0, b = 0;
58+
for (int num : nums) {
59+
if ((num & diff) == 0) a ^= num;
60+
else b ^= num;
61+
}
62+
return new int[]{a, b};
63+
}
64+
}
3865
```
3966

4067
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
class Solution {
22
public int[] singleNumber(int[] nums) {
3-
int t = 0;
3+
int xor = 0;
44
for (int num : nums) {
5-
t ^= num;
5+
xor ^= num;
66
}
7-
int lastBit = t & -t;
8-
int t1 = 0, t2 = 0;
7+
int diff = xor & (-xor);
8+
int a = 0, b = 0;
99
for (int num : nums) {
10-
if ((num & lastBit) != 0) {
11-
t1 ^= num;
12-
} else {
13-
t2 ^= num;
14-
}
10+
if ((num & diff) == 0) a ^= num;
11+
else b ^= num;
1512
}
16-
return new int[]{t1, t2};
13+
return new int[]{a, b};
1714
}
18-
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def singleNumber(self, nums: List[int]) -> List[int]:
3+
xor = 0
4+
for num in nums:
5+
xor ^= num
6+
diff = xor & (-xor)
7+
a = b = 0
8+
for num in nums:
9+
if (num & diff) == 0:
10+
a ^= num
11+
else:
12+
b ^= num
13+
return [a, b]

0 commit comments

Comments
 (0)
Please sign in to comment.