func rotate(nums []int, k int) { n := len(nums) // 0 索引要轮转到 step 索引位置 // 这里没创建新变量 step,而是复用了 k 变量 k %= n // 几轮? for start, count := 0, gcd(k, n); start < count; start++ { cur, curNum := start, nums[start] // 走完一轮 for ok := true; ok; ok = cur != start { next := (cur + k) % n nums[next], curNum, cur = curNum, nums[next], next } }}// 最大公约数func gcd(a, b int) int { for a != 0 { a, b = b % a, a } return b}