Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fbfd3dc

Browse files
committed
feat: add solutions to lc problem: No.0367
No.0367.Valid Perfect Square
1 parent cad24b1 commit fbfd3dc

File tree

8 files changed

+123
-45
lines changed

8 files changed

+123
-45
lines changed

‎solution/0000-0099/0052.N-Queens II/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<div class="original__bRMd">
1616
<div>
1717
<p><strong>示例 1:</strong></p>
18-
<img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0052.N-Queens%20II/images/queens.jpg" style="width: 600px; height: 268px;" />
18+
<img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0052.N-Queens%20II/images/8-queens.png" style="width: 600px; height: 268px;" />
1919
<pre>
2020
<strong>输入:</strong>n = 4
2121
<strong>输出:</strong>2

‎solution/0000-0099/0052.N-Queens II/README_EN.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<p>&nbsp;</p>
1212
<p><strong>Example 1:</strong></p>
13-
<img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0052.N-Queens%20II/images/queens.jpg" style="width: 600px; height: 268px;" />
13+
<img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0052.N-Queens%20II/images/8-queens.png" style="width: 600px; height: 268px;" />
1414
<pre>
1515
<strong>Input:</strong> n = 4
1616
<strong>Output:</strong> 2

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

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@
3838

3939
<!-- 这里可写通用的实现逻辑 -->
4040

41-
二分法。
41+
**1. 二分查找**
42+
43+
**2. 转换为数学问题**
44+
45+
由于 `n2 = 1 + 3 + 5 + ... + (2n-1)`,对数字 num 不断减去 i (`i = 1, 3, 5, ...`) 直至 num 不大于 0,如果最终 num 等于 0,说明是一个有效的完全平方数。
4246

4347
<!-- tabs:start -->
4448

@@ -51,25 +55,35 @@ class Solution:
5155
def isPerfectSquare(self, num: int) -> bool:
5256
left, right = 1, num
5357
while left < right:
54-
mid = left + ((right- left) >> 1)
55-
if num // mid <= mid:
58+
mid = (left + right) >> 1
59+
if mid * mid >= num:
5660
right = mid
5761
else:
5862
left = mid + 1
5963
return left * left == num
6064
```
6165

66+
```python
67+
class Solution:
68+
def isPerfectSquare(self, num: int) -> bool:
69+
i = 1
70+
while num > 0:
71+
num -= i
72+
i += 2
73+
return num == 0
74+
```
75+
6276
### **Java**
6377

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

6680
```java
6781
class Solution {
6882
public boolean isPerfectSquare(int num) {
69-
int left = 1, right = num;
83+
long left = 1, right = num;
7084
while (left < right) {
71-
int mid = (left + right) >>> 1;
72-
if (num / mid <= mid) {
85+
long mid = (left + right) >>> 1;
86+
if (mid * mid >= num) {
7387
right = mid;
7488
} else {
7589
left = mid + 1;
@@ -80,34 +94,53 @@ class Solution {
8094
}
8195
```
8296

97+
```java
98+
class Solution {
99+
public boolean isPerfectSquare(int num) {
100+
for (int i = 1; num > 0; i += 2) {
101+
num -= i;
102+
}
103+
return num == 0;
104+
}
105+
}
106+
```
107+
83108
### **C++**
84109

85110
```cpp
86111
class Solution {
87112
public:
88113
bool isPerfectSquare(int num) {
89114
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-
}
115+
while (left < right)
116+
{
117+
long mid = left + right >> 1;
118+
if (mid * mid >= num) right = mid;
119+
else left = mid + 1;
97120
}
98121
return left * left == num;
99122
}
100123
};
101124
```
102125
126+
```cpp
127+
class Solution {
128+
public:
129+
bool isPerfectSquare(int num) {
130+
for (int i = 1; num > 0; i += 2) num -= i;
131+
return num == 0;
132+
}
133+
};
134+
```
135+
103136
### **Go**
104137

105138
```go
106139
func isPerfectSquare(num int) bool {
107140
left, right := 1, num
108141
for left < right {
109-
mid := left + (right-left)>>1
110-
if num/mid <= mid {
142+
mid := (left + right) >> 1
143+
if mid*mid >= num {
111144
right = mid
112145
} else {
113146
left = mid + 1
@@ -117,6 +150,15 @@ func isPerfectSquare(num int) bool {
117150
}
118151
```
119152

153+
```go
154+
func isPerfectSquare(num int) bool {
155+
for i := 1; num > 0; i += 2 {
156+
num -= i
157+
}
158+
return num == 0
159+
}
160+
```
161+
120162
### **...**
121163

122164
```

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

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,33 @@ class Solution:
3434
def isPerfectSquare(self, num: int) -> bool:
3535
left, right = 1, num
3636
while left < right:
37-
mid = left + ((right- left) >> 1)
38-
if num // mid <= mid:
37+
mid = (left + right) >> 1
38+
if mid * mid >= num:
3939
right = mid
4040
else:
4141
left = mid + 1
4242
return left * left == num
4343
```
4444

45+
```python
46+
class Solution:
47+
def isPerfectSquare(self, num: int) -> bool:
48+
i = 1
49+
while num > 0:
50+
num -= i
51+
i += 2
52+
return num == 0
53+
```
54+
4555
### **Java**
4656

4757
```java
4858
class Solution {
4959
public boolean isPerfectSquare(int num) {
50-
int left = 1, right = num;
60+
long left = 1, right = num;
5161
while (left < right) {
52-
int mid = (left + right) >>> 1;
53-
if (num / mid <= mid) {
62+
long mid = (left + right) >>> 1;
63+
if (mid * mid >= num) {
5464
right = mid;
5565
} else {
5666
left = mid + 1;
@@ -61,34 +71,53 @@ class Solution {
6171
}
6272
```
6373

74+
```java
75+
class Solution {
76+
public boolean isPerfectSquare(int num) {
77+
for (int i = 1; num > 0; i += 2) {
78+
num -= i;
79+
}
80+
return num == 0;
81+
}
82+
}
83+
```
84+
6485
### **C++**
6586

6687
```cpp
6788
class Solution {
6889
public:
6990
bool isPerfectSquare(int num) {
7091
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-
}
92+
while (left < right)
93+
{
94+
long mid = left + right >> 1;
95+
if (mid * mid >= num) right = mid;
96+
else left = mid + 1;
7897
}
7998
return left * left == num;
8099
}
81100
};
82101
```
83102
103+
```cpp
104+
class Solution {
105+
public:
106+
bool isPerfectSquare(int num) {
107+
for (int i = 1; num > 0; i += 2) num -= i;
108+
return num == 0;
109+
}
110+
};
111+
```
112+
84113
### **Go**
85114

86115
```go
87116
func isPerfectSquare(num int) bool {
88117
left, right := 1, num
89118
for left < right {
90-
mid := left + (right-left)>>1
91-
if num/mid <= mid {
119+
mid := (left + right) >> 1
120+
if mid*mid >= num {
92121
right = mid
93122
} else {
94123
left = mid + 1
@@ -98,6 +127,15 @@ func isPerfectSquare(num int) bool {
98127
}
99128
```
100129

130+
```go
131+
func isPerfectSquare(num int) bool {
132+
for i := 1; num > 0; i += 2 {
133+
num -= i
134+
}
135+
return num == 0
136+
}
137+
```
138+
101139
### **...**
102140

103141
```

‎solution/0300-0399/0367.Valid Perfect Square/Solution.cpp‎

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@ class Solution {
22
public:
33
bool isPerfectSquare(int num) {
44
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-
}
5+
while (left < right)
6+
{
7+
long mid = left + right >> 1;
8+
if (mid * mid >= num) right = mid;
9+
else left = mid + 1;
1210
}
1311
return left * left == num;
1412
}

‎solution/0300-0399/0367.Valid Perfect Square/Solution.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
func isPerfectSquare(num int) bool {
22
left, right := 1, num
33
for left < right {
4-
mid := left + (right-left)>>1
5-
if num/mid<=mid {
4+
mid := (left + right) >>1
5+
if mid*mid>=num {
66
right = mid
77
} else {
88
left = mid + 1

‎solution/0300-0399/0367.Valid Perfect Square/Solution.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
class Solution {
22
public boolean isPerfectSquare(int num) {
3-
int left = 1, right = num;
3+
long left = 1, right = num;
44
while (left < right) {
5-
int mid = (left + right) >>> 1;
6-
if (num / mid <= mid) {
5+
long mid = (left + right) >>> 1;
6+
if (mid * mid >= num) {
77
right = mid;
88
} else {
99
left = mid + 1;

‎solution/0300-0399/0367.Valid Perfect Square/Solution.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ class Solution:
22
def isPerfectSquare(self, num: int) -> bool:
33
left, right = 1, num
44
while left < right:
5-
mid = left + ((right-left) >> 1)
6-
if num// mid <=mid:
5+
mid = (left + right) >> 1
6+
if mid* mid >=num:
77
right = mid
88
else:
99
left = mid + 1

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /