/*
题目:Rotate an array of n elements to the right by k steps.
*/
解法一:暴力求解,即每次通过移动数组的位置,进行旋转,但是最后一个测试用例超时
public void rotate(int[] nums, int k) {
for(int i=0;i<k;i++){
int temp=nums[nums.length-1];
for(int j=nums.length-1;j>0;j--){
nums[j]=nums[j-1];
}//移动位置
nums[0]=temp;
}
}
解法二:当k是数组的整数倍的时候,不需要改变数组
public void rotate(int[] nums, int k) {
int stemp=k%nums.length;//因为当k的长度等于数组的长度的时候,相当于没有旋转
if(stemp==0){//如果取余为0则说明无需要翻转了
return;
}
int j=0;
int [] result=new int[nums.length];
for(int i=0;i<nums.length;i++){//额外开辟一个数组
result[i]=nums[i];
}
for(int i=nums.length-stemp;i<nums.length;i++){//把后stemp个数赋给数组nums前stemp个数
nums[j]=result[i];
j++;
}
for(int i=0;i<nums.length-stemp;i++){//把result的前面的数赋给nums
nums[j]=result[i];
j++;
}
}