ps:先用余数确定最后移动几位 先提取移动的再进行简单的替换。
public class S_189 {
public void rotate(int[] nums, int k) {
// 用余数来表示——去掉循环的次数
k = k % nums.length;
if (k == 0) {
return;
}
int[] buf = new int[k];
// 先提取需要移动的数(小于k)
for(int i=0; i<k; i++) {
buf[i] = nums[nums.length-k+i];
}
// 将k后面的从头开始覆盖
for(int i=nums.length-1; i>=k; i--) {
nums[i] = nums[i-k];
}
// 再将剩下的部分用之前提取出来的部分覆盖
for(int i=0; i<k; i++) {
nums[i] = buf[i];
}
}
}