public void rotate3(int [] nums, int k){//一次移动一个
        if(k ==0 )return;
        if(k > nums.length){
            k = k % nums.length;
        }
        int temp = 0;
        while (k -- > 0){
            temp = nums[nums.length - 1];
            System.arraycopy(nums, 0 ,nums,1,nums.length-1);
            nums[0] = temp;
        }
    }
思路2:以空间换时间,把最後面的k字符复制到新数组的前面,然后复制其他部分,复杂度both时间和空间O(N)
代码2:
    public void rotate2(int [] nums, int k){//开辟新数组
        if(k ==0 )return;
        if(k > nums.length){
            k = k % nums.length;
        }
        int []rs = new int[nums.length];
        int start = nums.length - k;
        System.arraycopy(nums, start, rs, 0, k);
        System.arraycopy(nums, 0, rs, k, rs.length - k);
        System.arraycopy(rs, 0, nums,0, rs.length);
    }    public void rotate1(int [] nums, int k){//不断向右平移
        if(k ==0 )return;
        if(k > nums.length){
            k = k % nums.length;
        }
        int front = 0;
        int end = nums.length - k;
        int temp;
        int curLength = nums.length;
        while (front < nums.length -1 ){
            int nextK = 0;//下一个平移长度
            if(k > curLength - k && curLength-k > 0){
                nextK = k % (curLength -k);
                if(nextK == 0)nextK = curLength - k;
            } else if(curLength - k == 0){
                return;
            }else {
                nextK = k;
            };
            for(int i =0; i < k; ++i){
                if(front >= nums.length || end >= nums.length)break;
                temp = nums[front];
                nums[front] = nums[end];
                nums[end] = temp;
                front ++;
                end ++;
            }
            if(front == nums.length -1) break;
            curLength = curLength-k;
            k = nextK ;
            end = nums.length - k;
        }
    }    public void rotate4(int [] nums, int k){//一次移动一个
        if(k ==0 )return;
        if(k > nums.length){
            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){
        int temp = 0;
        while (start <= end){
            temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start ++;
            end --;
        }
    }原文:http://blog.csdn.net/youmengjiuzhuiba/article/details/44858373