题目详情:点此处
解法①:
相对来说比较容易想到的办法就是借助一个数组来实现
也就是将原数组中k以及后面的数据作为新数组前k个数据,原数组中k前面的数据作为新数组k后面的数数据
class Solution {
public void rotate(int[] nums, int k) {
int n=nums.length;
int[] num= new int[n];
for(int i=0;i<n;i++){
num[(i+k)%n]=nums[i];
}
System.arraycopy(num,0,nums,0,n);
}
}
解法②:数组翻转法
class Solution {
public void rotate(int[] nums, int k) {
k %= nums.length;
reverse(nums,0,nums.length-1);
reverse(nums,0,k-1);
reverse(nums,k,nums.length-1);
}
public void reverse(int[] nums, int start,int end){
while(start < end){
int temp = nums[start];
nums[start] = nums[end];
nums[end] =temp;
start+=1;
end-=1;
}
}
}
题解③:看到一个非常不错的解决方案