错误解法一:申请一个数组,第i个数放在新数组的i+k
或i+k-nums.length
上
class Solution {public void rotate(int[] nums, int k) {int[] results=new int[nums.length];for(int i=0; i<nums.length; i++){if(i+k<nums.length){results[i+k] = nums[i];}else{results[i+k-nums.length] = nums[i];}}for(int i=0; i<nums.length; i++){nums[i] = results[i];}}
}
错误原因:未考虑旋转次数>数组大小

错误解法二:进行k次旋转,每一次保存最后一个数,所有数往后移后,将保存的数放在第一位
class Solution {public void rotate(int[] nums, int k) {int i=0;while(i<k){int last=nums[nums.length-1];for(int j=nums.length-1;j>0;j--){nums[j]=nums[j-1];}nums[0]=last;i++;}}
}
错误原因:超出时间限制

解法一:(改进错误解法一)第i个数放在新数组的i+k
或(i+k)%nums.length
上
class Solution {public void rotate(int[] nums, int k) {int[] results=new int[nums.length];for(int i=0; i<nums.length; i++){if(i+k<nums.length){results[i+k] = nums[i];}else{results[(i+k)%nums.length] = nums[i];}}for(int i=0; i<nums.length; i++){nums[i] = results[i];}}
}