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.
Related problem: Reverse Words in a String II
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
思路:首先将数组分成两部分,先分别翻转后,再整个翻转。
public class Solution {
public void rotate(int[] nums, int k) {
List<Integer> tmp1 = new ArrayList<Integer>();
List<Integer> tmp2 = new ArrayList<Integer>();
int n = nums.length;
k = k % n;
for (int i = 0; i < n-k; i++)
tmp1.add(nums[i]);
for (int i = n-k; i < n; i++)
tmp2.add(nums[i]);
Collections.reverse(tmp1);
Collections.reverse(tmp2);
tmp1.addAll(tmp2);
Collections.reverse(tmp1);
for (int i = 0; i < n; i++)
nums[i] = tmp1.get(i);
}
}