在 Go 中,你可以通过简单的切片操作来实现数组的旋转。假设我们有一个数组或切片,并希望将其旋转 k 次(右旋),可以使用以下步骤实现:
示例代码
go
package main
import "fmt"
// Rotate rotates a slice to the right by k steps
func Rotate(nums []int, k int) []int {
n := len(nums)
if n == 0 || k%n == 0 {
return nums
}
k = k % n // Ensure k is within bounds
// Perform the rotation
return append(nums[n-k:], nums[:n-k]...)
}
func main() {
nums := []int{1, 2, 3, 4, 5, 6, 7}
k := 3
rotated := Rotate(nums, k)
fmt.Println("Original:", nums)
fmt.Println("Rotated:", rotated)
}代码解析
切片操作:
nums[n-k:]获取数组的最后k个元素。nums[:n-k]获取数组的前n-k个元素。- 使用
append拼接后形成旋转后的结果。
边界处理:
- 如果数组长度为 0 或者
k是数组长度的倍数,不需要旋转。 - 使用
k % n以确保k不会超过数组的长度。
- 如果数组长度为 0 或者
测试输出
对于 nums = [1, 2, 3, 4, 5, 6, 7] 和 k = 3,程序将输出:
Original: [1 2 3 4 5 6 7]
Rotated: [5 6 7 1 2 3 4]左旋实现
如果需要左旋,可以稍作修改:
go
func RotateLeft(nums []int, k int) []int {
n := len(nums)
if n == 0 || k%n == 0 {
return nums
}
k = k % n // Ensure k is within bounds
return append(nums[k:], nums[:k]...)
}调用方式与右旋相似,旋转逻辑调整为取前 k 个元素放到末尾即可。