Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Could you do it in-place with O(1) extra space?
想出三种解法:翻转数组;
解法一:
public void rotate1(int[] nums, int k) {
if (nums.length == 1) return ;
k = k % nums.length;
if (k == 0) return;
for (int i = 0; i<k; i++){
int temp = nums[nums.length - 1];
for (int j = nums.length - 1; j>=1; j--){
nums[j] = nums[j-1];
}
nums[0] = temp;
}
}
解法二:
public void rotate2(int[] nums, int k){
if (nums.length == 1) return ;
k = k % nums.length;
if (k == 0) return;
int[] numExtra = new int[k];
int count = 0;
for (int i = k - 1; i >= 0 ; i--){
numExtra[count] = nums[nums.length - i - 1];
//System.out.println(numExtra[count] + " " + count);
count++;
}
count = nums.length -1;
for (int i = nums.length - k - 1; i >= 0; i--){
nums[count] = nums[i];
//System.out.println(nums[count] + " " + count);
count--;
}
for (int i = 0; i < k; i++){
nums[i] = numExtra[i];
}
}
解法三: