Skip to content

Commit fc6e686

Browse files
committed
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

+37
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

+37
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
```
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

+22
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

+22
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
```
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

+22-1
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

+22-1
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
```
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)