问题来源:https://leetcode.com/problems/rotate-array/
/**
*
* <p>
* ClassName RotateArray
* </p>
* <p>
* Description 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.
*
* [show hint]
*
* Related problem: Reverse Words in a String II
* </p>
*
* @author TKPad wangx89@126.com
* <p>
* Date 2015年3月18日 下午5:18:17
* </p>
* @version V1.0.0
*
*/
public class RotateArray {
public void rotate(int[] nums, int k) {
k = k % nums.length;// 取余。由于一个循环,事实上数组是不变的
reverse(nums, 0, nums.length - k);
reverse(nums, nums.length - k, nums.length);
reverse(nums, 0, nums.length);
}
public void reverse(int[] nums, int start, int end) {
if (nums.length == 1) {
return;
}
if (start == 0) {
for (int i = start; i < (end + start) / 2; i++) {
int temp = nums[i];
nums[i] = nums[end - i - 1];
nums[end - i - 1] = temp;
}
} else {
for (int i = start; i < (end + start) / 2; i++) {
int temp = nums[i];
nums[i] = nums[end + start - i - 1];
nums[end + start - i - 1] = temp;
}
}
}
public void print(int[] nums) {
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
// 測试数据集 [-1],2
// 測试数据集 [1,2],3
// 測试数据集 [1,2,3,4,5,6,7],3
int[] i = new int[] { 1, 2, 3, 4, 5, 6, 7 };
new RotateArray().rotate(i, 3);
}
}