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 fc6e686

Browse files
feat: add golang solution to lc problems: No.54,154,189
1 parent 844c328 commit fc6e686

File tree

9 files changed

+227
-2
lines changed

9 files changed

+227
-2
lines changed

‎solution/0000-0099/0054.Spiral Matrix/README.md‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,43 @@ var spiralOrder = function (matrix) {
145145
};
146146
```
147147

148+
### **Go**
149+
150+
```go
151+
func spiralOrder(matrix [][]int) []int {
152+
if len(matrix) == 0 {
153+
return []int{}
154+
}
155+
156+
m, n := len(matrix), len(matrix[0])
157+
ans := make([]int, 0, m*n)
158+
159+
top, bottom, left, right := 0, m-1, 0, n-1
160+
for left <= right && top <= bottom {
161+
for i := left; i <= right; i++ {
162+
ans = append(ans, matrix[top][i])
163+
}
164+
for i := top + 1; i <= bottom; i++ {
165+
ans = append(ans, matrix[i][right])
166+
}
167+
if left < right && top < bottom {
168+
for i := right - 1; i >= left; i-- {
169+
ans = append(ans, matrix[bottom][i])
170+
}
171+
for i := bottom - 1; i > top; i-- {
172+
ans = append(ans, matrix[i][left])
173+
}
174+
}
175+
top++
176+
bottom--
177+
left++
178+
right--
179+
}
180+
181+
return ans
182+
}
183+
```
184+
148185
### **...**
149186

150187
```

‎solution/0000-0099/0054.Spiral Matrix/README_EN.md‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,43 @@ var spiralOrder = function (matrix) {
134134
};
135135
```
136136

137+
### **Go**
138+
139+
```go
140+
func spiralOrder(matrix [][]int) []int {
141+
if len(matrix) == 0 {
142+
return []int{}
143+
}
144+
145+
m, n := len(matrix), len(matrix[0])
146+
ans := make([]int, 0, m*n)
147+
148+
top, bottom, left, right := 0, m-1, 0, n-1
149+
for left <= right && top <= bottom {
150+
for i := left; i <= right; i++ {
151+
ans = append(ans, matrix[top][i])
152+
}
153+
for i := top + 1; i <= bottom; i++ {
154+
ans = append(ans, matrix[i][right])
155+
}
156+
if left < right && top < bottom {
157+
for i := right - 1; i >= left; i-- {
158+
ans = append(ans, matrix[bottom][i])
159+
}
160+
for i := bottom - 1; i > top; i-- {
161+
ans = append(ans, matrix[i][left])
162+
}
163+
}
164+
top++
165+
bottom--
166+
left++
167+
right--
168+
}
169+
170+
return ans
171+
}
172+
```
173+
137174
### **...**
138175

139176
```
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
func spiralOrder(matrix [][]int) []int {
2+
if len(matrix) == 0 {
3+
return []int{}
4+
}
5+
6+
m, n := len(matrix), len(matrix[0])
7+
ans := make([]int, 0, m*n)
8+
9+
top, bottom, left, right := 0, m-1, 0, n-1
10+
for left <= right && top <= bottom {
11+
for i := left; i <= right; i++ {
12+
ans = append(ans, matrix[top][i])
13+
}
14+
for i := top + 1; i <= bottom; i++ {
15+
ans = append(ans, matrix[i][right])
16+
}
17+
if left < right && top < bottom {
18+
for i := right - 1; i >= left; i-- {
19+
ans = append(ans, matrix[bottom][i])
20+
}
21+
for i := bottom - 1; i > top; i-- {
22+
ans = append(ans, matrix[i][left])
23+
}
24+
}
25+
top++
26+
bottom--
27+
left++
28+
right--
29+
}
30+
31+
return ans
32+
}

‎solution/0100-0199/0154.Find Minimum in Rotated Sorted Array II/README.md‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,28 @@ var findMin = function (nums) {
141141
};
142142
```
143143

144+
### **Go**
145+
146+
```go
147+
func findMin(nums []int) int {
148+
left, right := 0, len(nums)-1
149+
for left+1 < right {
150+
mid := int(uint(left+right) >> 1)
151+
if nums[mid] > nums[right] {
152+
left = mid
153+
} else if nums[mid] < nums[right] {
154+
right = mid
155+
} else {
156+
right--
157+
}
158+
}
159+
if nums[left] < nums[right] {
160+
return nums[left]
161+
}
162+
return nums[right]
163+
}
164+
```
165+
144166
### **...**
145167

146168
```

‎solution/0100-0199/0154.Find Minimum in Rotated Sorted Array II/README_EN.md‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,28 @@ var findMin = function (nums) {
112112
};
113113
```
114114

115+
### **Go**
116+
117+
```go
118+
func findMin(nums []int) int {
119+
left, right := 0, len(nums)-1
120+
for left+1 < right {
121+
mid := int(uint(left+right) >> 1)
122+
if nums[mid] > nums[right] {
123+
left = mid
124+
} else if nums[mid] < nums[right] {
125+
right = mid
126+
} else {
127+
right--
128+
}
129+
}
130+
if nums[left] < nums[right] {
131+
return nums[left]
132+
}
133+
return nums[right]
134+
}
135+
```
136+
115137
### **...**
116138

117139
```
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
func findMin(nums []int) int {
2+
left, right := 0, len(nums)-1
3+
for left+1 < right {
4+
mid := int(uint(left+right) >> 1)
5+
if nums[mid] > nums[right] {
6+
left = mid
7+
} else if nums[mid] < nums[right] {
8+
right = mid
9+
} else {
10+
right--
11+
}
12+
}
13+
if nums[left] < nums[right] {
14+
return nums[left]
15+
}
16+
return nums[right]
17+
}

‎solution/0100-0199/0189.Rotate Array/README.md‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<pre>
3636
<strong>输入:</strong>nums = [-1,-100,3,99], k = 2
3737
<strong>输出:</strong>[3,99,-1,-100]
38-
<strong>解释:</strong>
38+
<strong>解释:</strong>
3939
向右旋转 1 步: [99,-1,-100,3]
4040
向右旋转 2 步: [3,99,-1,-100]</pre>
4141

@@ -136,6 +136,27 @@ var rotate = function (nums, k) {
136136
};
137137
```
138138

139+
### **Go**
140+
141+
```go
142+
func rotate(nums []int, k int) {
143+
n := len(nums)
144+
k %= n
145+
146+
reverse(nums, 0, n-1)
147+
reverse(nums, 0, k-1)
148+
reverse(nums, k, n-1)
149+
}
150+
151+
func reverse(nums []int, i, j int) {
152+
for i < j {
153+
nums[i], nums[j] = nums[j], nums[i]
154+
i++
155+
j--
156+
}
157+
}
158+
```
159+
139160
### **...**
140161

141162
```

‎solution/0100-0199/0189.Rotate Array/README_EN.md‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ rotate 3 steps to the right: [5,6,7,1,2,3,4]
2323
<pre>
2424
<strong>Input:</strong> nums = [-1,-100,3,99], k = 2
2525
<strong>Output:</strong> [3,99,-1,-100]
26-
<strong>Explanation:</strong>
26+
<strong>Explanation:</strong>
2727
rotate 1 steps to the right: [99,-1,-100,3]
2828
rotate 2 steps to the right: [3,99,-1,-100]
2929
</pre>
@@ -112,6 +112,27 @@ var rotate = function (nums, k) {
112112
};
113113
```
114114

115+
### **Go**
116+
117+
```go
118+
func rotate(nums []int, k int) {
119+
n := len(nums)
120+
k %= n
121+
122+
reverse(nums, 0, n-1)
123+
reverse(nums, 0, k-1)
124+
reverse(nums, k, n-1)
125+
}
126+
127+
func reverse(nums []int, i, j int) {
128+
for i < j {
129+
nums[i], nums[j] = nums[j], nums[i]
130+
i++
131+
j--
132+
}
133+
}
134+
```
135+
115136
### **...**
116137

117138
```
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func rotate(nums []int, k int) {
2+
n := len(nums)
3+
k %= n
4+
5+
reverse(nums, 0, n-1)
6+
reverse(nums, 0, k-1)
7+
reverse(nums, k, n-1)
8+
}
9+
10+
func reverse(nums []int, i, j int) {
11+
for i < j {
12+
nums[i], nums[j] = nums[j], nums[i]
13+
i++
14+
j--
15+
}
16+
}

0 commit comments

Comments
(0)

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