Skip to content

Commit 2d229e7

Browse files
committed
feat: add solutions to lc problem: No.0367. Valid Perfect Square
1 parent 0142c9d commit 2d229e7

File tree

6 files changed

+169
-9
lines changed

6 files changed

+169
-9
lines changed

solution/0300-0399/0367.Valid Perfect Square/README.md

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,87 @@
3434
<li><code>1 <= num <= 2^31 - 1</code></li>
3535
</ul>
3636

37-
3837
## 解法
3938

4039
<!-- 这里可写通用的实现逻辑 -->
4140

41+
二分法。
42+
4243
<!-- tabs:start -->
4344

4445
### **Python3**
4546

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

4849
```python
49-
50+
class Solution:
51+
def isPerfectSquare(self, num: int) -> bool:
52+
left, right = 1, num
53+
while left < right:
54+
mid = left + ((right - left) >> 1)
55+
if num // mid <= mid:
56+
right = mid
57+
else:
58+
left = mid + 1
59+
return left * left == num
5060
```
5161

5262
### **Java**
5363

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

5666
```java
67+
class Solution {
68+
public boolean isPerfectSquare(int num) {
69+
int left = 1, right = num;
70+
while (left < right) {
71+
int mid = (left + right) >>> 1;
72+
if (num / mid <= mid) {
73+
right = mid;
74+
} else {
75+
left = mid + 1;
76+
}
77+
}
78+
return left * left == num;
79+
}
80+
}
81+
```
82+
83+
### **C++**
84+
85+
```cpp
86+
class Solution {
87+
public:
88+
bool isPerfectSquare(int num) {
89+
long left = 1, right = num;
90+
while (left < right) {
91+
int mid = left + ((right - left) >> 1);
92+
if (num / mid <= mid) {
93+
right = mid;
94+
} else {
95+
left = mid + 1;
96+
}
97+
}
98+
return left * left == num;
99+
}
100+
};
101+
```
57102
103+
### **Go**
104+
105+
```go
106+
func isPerfectSquare(num int) bool {
107+
left, right := 1, num
108+
for left < right {
109+
mid := left + (right-left)>>1
110+
if num/mid <= mid {
111+
right = mid
112+
} else {
113+
left = mid + 1
114+
}
115+
}
116+
return left*left == num
117+
}
58118
```
59119

60120
### **...**

solution/0300-0399/0367.Valid Perfect Square/README_EN.md

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,79 @@
2323
<li><code>1 &lt;= num &lt;= 2^31 - 1</code></li>
2424
</ul>
2525

26-
2726
## Solutions
2827

2928
<!-- tabs:start -->
3029

3130
### **Python3**
3231

3332
```python
34-
33+
class Solution:
34+
def isPerfectSquare(self, num: int) -> bool:
35+
left, right = 1, num
36+
while left < right:
37+
mid = left + ((right - left) >> 1)
38+
if num // mid <= mid:
39+
right = mid
40+
else:
41+
left = mid + 1
42+
return left * left == num
3543
```
3644

3745
### **Java**
3846

3947
```java
48+
class Solution {
49+
public boolean isPerfectSquare(int num) {
50+
int left = 1, right = num;
51+
while (left < right) {
52+
int mid = (left + right) >>> 1;
53+
if (num / mid <= mid) {
54+
right = mid;
55+
} else {
56+
left = mid + 1;
57+
}
58+
}
59+
return left * left == num;
60+
}
61+
}
62+
```
63+
64+
### **C++**
65+
66+
```cpp
67+
class Solution {
68+
public:
69+
bool isPerfectSquare(int num) {
70+
long left = 1, right = num;
71+
while (left < right) {
72+
int mid = left + ((right - left) >> 1);
73+
if (num / mid <= mid) {
74+
right = mid;
75+
} else {
76+
left = mid + 1;
77+
}
78+
}
79+
return left * left == num;
80+
}
81+
};
82+
```
4083
84+
### **Go**
85+
86+
```go
87+
func isPerfectSquare(num int) bool {
88+
left, right := 1, num
89+
for left < right {
90+
mid := left + (right-left)>>1
91+
if num/mid <= mid {
92+
right = mid
93+
} else {
94+
left = mid + 1
95+
}
96+
}
97+
return left*left == num
98+
}
4199
```
42100

43101
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
bool isPerfectSquare(int num) {
4+
long left = 1, right = num;
5+
while (left < right) {
6+
int mid = left + ((right - left) >> 1);
7+
if (num / mid <= mid) {
8+
right = mid;
9+
} else {
10+
left = mid + 1;
11+
}
12+
}
13+
return left * left == num;
14+
}
15+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
func isPerfectSquare(num int) bool {
2+
left, right := 1, num
3+
for left < right {
4+
mid := left + (right-left)>>1
5+
if num/mid <= mid {
6+
right = mid
7+
} else {
8+
left = mid + 1
9+
}
10+
}
11+
return left*left == num
12+
}
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
class Solution {
22
public boolean isPerfectSquare(int num) {
3-
long r = num;
4-
while (r * r > num) {
5-
r = (r + num / r) / 2;
3+
int left = 1, right = num;
4+
while (left < right) {
5+
int mid = (left + right) >>> 1;
6+
if (num / mid <= mid) {
7+
right = mid;
8+
} else {
9+
left = mid + 1;
10+
}
611
}
7-
return r * r == num;
12+
return left * left == num;
813
}
9-
}
14+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def isPerfectSquare(self, num: int) -> bool:
3+
left, right = 1, num
4+
while left < right:
5+
mid = left + ((right - left) >> 1)
6+
if num // mid <= mid:
7+
right = mid
8+
else:
9+
left = mid + 1
10+
return left * left == num

0 commit comments

Comments
 (0)