31
31
32
32
<!-- 这里可写通用的实现逻辑 -->
33
33
34
+ 二分查找。
35
+
34
36
<!-- tabs:start -->
35
37
36
38
### ** Python3**
40
42
``` python
41
43
class Solution :
42
44
def mySqrt (self , x : int ) -> int :
43
- if x == 0 :
44
- return 0
45
- left, right = 1 , x
45
+ left, right = 0 , x
46
46
while left < right:
47
47
mid = (left + right + 1 ) >> 1
48
48
# mid*mid <= x
49
- if x // mid >= mid:
49
+ if mid <= x // mid:
50
50
left = mid
51
51
else :
52
52
right = mid - 1
@@ -60,13 +60,10 @@ class Solution:
60
60
``` java
61
61
class Solution {
62
62
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;
67
64
while (left < right) {
68
65
int mid = (left + right + 1 ) >>> 1 ;
69
- if (x / mid >= mid) {
66
+ if (mid <= x / mid) {
70
67
// mid*mid <= x
71
68
left = mid;
72
69
} else {
@@ -84,23 +81,35 @@ class Solution {
84
81
class Solution {
85
82
public:
86
83
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;
98
90
}
99
- return left;
91
+ return (int) left;
100
92
}
101
93
};
102
94
```
103
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
+
104
113
### ** JavaScript**
105
114
106
115
``` js
@@ -109,14 +118,11 @@ public:
109
118
* @return {number}
110
119
*/
111
120
var mySqrt = function (x ) {
112
- if (x == 0) {
113
- return 0;
114
- }
115
- let left = 1;
121
+ let left = 0 ;
116
122
let right = x;
117
123
while (left < right) {
118
124
const mid = (left + right + 1 ) >>> 1 ;
119
- if (x / mid >= mid) {
125
+ if (mid <= x / mid) {
120
126
left = mid;
121
127
} else {
122
128
right = mid - 1 ;
@@ -126,43 +132,20 @@ var mySqrt = function(x) {
126
132
};
127
133
```
128
134
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
-
149
135
### ** C#**
150
136
151
137
``` cs
152
138
public class Solution {
153
139
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 ;
158
141
while (left < right )
159
142
{
160
143
int mid = left + right + 1 >> 1 ;
161
- if (x / mid >= mid )
144
+ if (mid <= x / mid )
162
145
{
163
146
left = mid ;
164
- }
165
- else
147
+ }
148
+ else
166
149
{
167
150
right = mid - 1 ;
168
151
}
0 commit comments