Skip to content

Commit b568e46

Browse files
committed
feat: add solutions to lcof2 problem: No.072.Sqrtx
1 parent b58225b commit b568e46

File tree

15 files changed

+286
-147
lines changed

15 files changed

+286
-147
lines changed

lcof2/剑指 Offer II 072. 求平方根/README.md

+107-1
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,128 @@
3131

3232
<!-- 这里可写通用的实现逻辑 -->
3333

34+
二分查找。
35+
3436
<!-- tabs:start -->
3537

3638
### **Python3**
3739

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

4042
```python
41-
43+
class Solution:
44+
def mySqrt(self, x: int) -> int:
45+
left, right = 0, x
46+
while left < right:
47+
mid = (left + right + 1) >> 1
48+
# mid*mid <= x
49+
if mid <= x // mid:
50+
left = mid
51+
else:
52+
right = mid - 1
53+
return left
4254
```
4355

4456
### **Java**
4557

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

4860
```java
61+
class Solution {
62+
public int mySqrt(int x) {
63+
int left = 0, right = x;
64+
while (left < right) {
65+
int mid = (left + right + 1) >>> 1;
66+
if (mid <= x /mid) {
67+
// mid*mid <= x
68+
left = mid;
69+
} else {
70+
right = mid - 1;
71+
}
72+
}
73+
return left;
74+
}
75+
}
76+
```
77+
78+
### **C++**
79+
80+
```cpp
81+
class Solution {
82+
public:
83+
int mySqrt(int x) {
84+
long long left = 0, right = x;
85+
while (left < right)
86+
{
87+
long long mid = left + ((right - left + 1) >> 1);
88+
if (mid <= x / mid) left = mid;
89+
else right = mid - 1;
90+
}
91+
return (int) left;
92+
}
93+
};
94+
```
95+
96+
### **Go**
97+
98+
```go
99+
func mySqrt(x int) int {
100+
left, right := 0, x
101+
for left < right {
102+
mid = left + (right-left+1)>>1
103+
if mid <= x/mid {
104+
left = mid
105+
} else {
106+
right = mid - 1
107+
}
108+
}
109+
return left
110+
}
111+
```
112+
113+
### **JavaScript**
114+
115+
```js
116+
/**
117+
* @param {number} x
118+
* @return {number}
119+
*/
120+
var mySqrt = function(x) {
121+
let left = 0;
122+
let right = x;
123+
while (left < right) {
124+
const mid = (left + right + 1) >>> 1;
125+
if (mid <= x / mid) {
126+
left = mid;
127+
} else {
128+
right = mid - 1;
129+
}
130+
}
131+
return left;
132+
};
133+
```
49134

135+
### **C#**
136+
137+
```cs
138+
public class Solution {
139+
public int MySqrt(int x) {
140+
int left = 0, right = x;
141+
while (left < right)
142+
{
143+
int mid = left + right + 1 >> 1;
144+
if (mid <= x / mid)
145+
{
146+
left = mid;
147+
}
148+
else
149+
{
150+
right = mid - 1;
151+
}
152+
}
153+
return left;
154+
}
155+
}
50156
```
51157

52158
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
int mySqrt(int x) {
4+
long long left = 0, right = x;
5+
while (left < right)
6+
{
7+
long long mid = left + ((right - left + 1) >> 1);
8+
if (mid <= x / mid) left = mid;
9+
else right = mid - 1;
10+
}
11+
return (int) left;
12+
}
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
public class Solution {
2+
public int MySqrt(int x) {
3+
int left = 0, right = x;
4+
while (left < right)
5+
{
6+
int mid = left + right + 1 >> 1;
7+
if (mid <= x / mid)
8+
{
9+
left = mid;
10+
}
11+
else
12+
{
13+
right = mid - 1;
14+
}
15+
}
16+
return left;
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
func mySqrt(x int) int {
2+
left, right := 0, x
3+
for left < right {
4+
mid = left + (right-left+1)>>1
5+
if mid <= x/mid {
6+
left = mid
7+
} else {
8+
right = mid - 1
9+
}
10+
}
11+
return left
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int mySqrt(int x) {
3+
int left = 0, right = x;
4+
while (left < right) {
5+
int mid = (left + right + 1) >>> 1;
6+
if (mid <= x /mid) {
7+
// mid*mid <= x
8+
left = mid;
9+
} else {
10+
right = mid - 1;
11+
}
12+
}
13+
return left;
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number} x
3+
* @return {number}
4+
*/
5+
var mySqrt = function(x) {
6+
let left = 0;
7+
let right = x;
8+
while (left < right) {
9+
const mid = (left + right + 1) >>> 1;
10+
if (mid <= x / mid) {
11+
left = mid;
12+
} else {
13+
right = mid - 1;
14+
}
15+
}
16+
return left;
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def mySqrt(self, x: int) -> int:
3+
left, right = 0, x
4+
while left < right:
5+
mid = (left + right + 1) >> 1
6+
# mid*mid <= x
7+
if mid <= x // mid:
8+
left = mid
9+
else:
10+
right = mid - 1
11+
return left

solution/0000-0099/0069.Sqrt(x)/README.md

+36-53
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131

3232
<!-- 这里可写通用的实现逻辑 -->
3333

34+
二分查找。
35+
3436
<!-- tabs:start -->
3537

3638
### **Python3**
@@ -40,13 +42,11 @@
4042
```python
4143
class Solution:
4244
def mySqrt(self, x: int) -> int:
43-
if x == 0:
44-
return 0
45-
left, right = 1, x
45+
left, right = 0, x
4646
while left < right:
4747
mid = (left + right + 1) >> 1
4848
# mid*mid <= x
49-
if x // mid >= mid:
49+
if mid <= x // mid:
5050
left = mid
5151
else:
5252
right = mid - 1
@@ -60,13 +60,10 @@ class Solution:
6060
```java
6161
class Solution {
6262
public int mySqrt(int x) {
63-
if (x == 0) {
64-
return 0;
65-
}
66-
int left = 1, right = x;
63+
int left = 0, right = x;
6764
while (left < right) {
6865
int mid = (left + right + 1) >>> 1;
69-
if (x / mid >= mid) {
66+
if (mid <= x /mid) {
7067
// mid*mid <= x
7168
left = mid;
7269
} else {
@@ -84,23 +81,35 @@ class Solution {
8481
class Solution {
8582
public:
8683
int mySqrt(int x) {
87-
if (x == 0) {
88-
return 0;
89-
}
90-
int left = 1, right = x;
91-
while (left < right) {
92-
int mid = left + ((right - left + 1) >> 1);
93-
if (x / mid >= mid) {
94-
left = mid;
95-
} else {
96-
right = mid - 1;
97-
}
84+
long long left = 0, right = x;
85+
while (left < right)
86+
{
87+
long long mid = left + ((right - left + 1) >> 1);
88+
if (mid <= x / mid) left = mid;
89+
else right = mid - 1;
9890
}
99-
return left;
91+
return (int) left;
10092
}
10193
};
10294
```
10395
96+
### **Go**
97+
98+
```go
99+
func mySqrt(x int) int {
100+
left, right := 0, x
101+
for left < right {
102+
mid = left + (right-left+1)>>1
103+
if mid <= x/mid {
104+
left = mid
105+
} else {
106+
right = mid - 1
107+
}
108+
}
109+
return left
110+
}
111+
```
112+
104113
### **JavaScript**
105114

106115
```js
@@ -109,14 +118,11 @@ public:
109118
* @return {number}
110119
*/
111120
var mySqrt = function(x) {
112-
if (x == 0) {
113-
return 0;
114-
}
115-
let left = 1;
121+
let left = 0;
116122
let right = x;
117123
while (left < right) {
118124
const mid = (left + right + 1) >>> 1;
119-
if (x / mid >= mid) {
125+
if (mid <= x / mid) {
120126
left = mid;
121127
} else {
122128
right = mid - 1;
@@ -126,43 +132,20 @@ var mySqrt = function(x) {
126132
};
127133
```
128134

129-
### **Go**
130-
131-
```go
132-
func mySqrt(x int) int {
133-
if x == 0 {
134-
return 0
135-
}
136-
left, right := 1, x
137-
for left < right {
138-
mid := left + (right-left+1)>>1
139-
if x/mid >= mid {
140-
left = mid
141-
} else {
142-
right = mid - 1
143-
}
144-
}
145-
return left
146-
}
147-
```
148-
149135
### **C#**
150136

151137
```cs
152138
public class Solution {
153139
public int MySqrt(int x) {
154-
if (x == 0) {
155-
return 0;
156-
}
157-
int left = 1, right = x;
140+
int left = 0, right = x;
158141
while (left < right)
159142
{
160143
int mid = left + right + 1 >> 1;
161-
if (x / mid >= mid)
144+
if (mid <= x / mid)
162145
{
163146
left = mid;
164-
}
165-
else
147+
}
148+
else
166149
{
167150
right = mid - 1;
168151
}

0 commit comments

Comments
 (0)