题目描述:
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.
题目本身比较简单,也没有额外的要求,比如空间要求、时间要求等。
之前遇到过相似的问题,当时用的递归去做。当时有限制n的大小(n<=100),这次没有限制,如果还用递归的思路去解决,会报stack overflow的错误。
因此,我改用循环的思路去做——据说每个递归都可以用迭代的方式去实现。
Java代码如下:
public class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
boolean[] flag = new boolean[n];
for(int i=0;i<n;i++){
int index = i;
int moveNum = nums[index];
while(!flag[index]){
flag[index] = true;
int dir = (index+k)%n;
int tmp = nums[dir];
nums[dir] = moveNum;
moveNum = tmp;
index = dir;
}
}
}
}