错误解法一:申请一个数组,第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];
}
}
}