class Solution {
public void rotate(int[] nums, int k) {
int len = nums.length;
while (k != 0) {
for (int tail = len - 1; tail > 0; tail--) {
int tmp = nums[tail - 1];
nums[tail - 1] = nums[tail];
nums[tail] = tmp;
}
k--;
}
}
}
解法二
class Solution {
public void rotate(int[] nums, int k) {
int len = nums.length;
k %= len; // <- 若 k>len 时,如 k=5 len=3 实际只需要转2位
int[] ret = new int[len];
int j = 0;
for (int i = len - k; i < len; i++) {
ret[j++] = nums[i];
}
int m = 0;
while (j < len) {
ret[j++] = nums[m++];
}
for (int n = 0; n < len; n++) {
nums[n] = ret[n];
}
}
}
解法三
class Solution {
// 轮转操作
public void rotate(int[] nums, int k) {
int len = nums.length;
k %= len; // <- 若 k>len 时,如 k=5 len=3 实际只需要转2位
// 先整体反转
reverse(nums, 0, len - 1);
// 反转左半部分
reverse(nums, 0, k - 1);
// 反转右半部分
reverse(nums, k, len - 1);
}
// 反转操作
public void reverse(int[] nums, int start, int end) {
while (start < end) {
int tmp = nums[start];
nums[start++] = nums[end];
nums[end--] = tmp;
}
}
}