Given an array, rotate the array to the right by k steps, where k is non-negative.
1.思路
题目意思是进行数组的翻转,这里的翻转是每翻转一次就把后面的1位数放到前面去。
根据翻转后的数找到规律是当需要翻转k位,假设原数组是[1,2,3,4,5,6,7],k=3。先将k+1 ~ len-1进行翻转,得到:[1,2,3,4,7,6,5],再将0~k进行翻转得到:[4,3,2,1,7,6,5] ,最后进行一次全数组翻转:[5,6,7,1,2,3,4]。
由于还需要考虑到一种情况就是k可能大于数组的长度,所以k = k%len
2.代码实现
class Solution {
public void rotate(int[] nums, int k) {
if (nums == null) {
return;
}
int len = nums.length;
k = k % len;
reverse(nums, 0, len - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, len - 1);
System.out.println(nums);
}
private void reverse(int[] nums, int start, int end) {
for (int i = start,j=end; i < j; i++,j--) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}