Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Related problem: Reverse Words in a String II
选择数组,将数组向右以为k步,在《编程珠玑》中有讲过这个算法,下面是比较好理解的“两手翻转法”
下面为python代码,自己写的不是很geek
class Solution(object):
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        while k >= len(nums): k -= len(nums)
        for i, v in enumerate(nums[-k::] + nums[:-k]):
            nums[i] = v
后面改进:
class Solution(object):
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        if not nums: return
        k %= len(nums)
        nums[0:k], nums[k:] = nums[- k:], nums[0: - k]
另外一种解法:
class Solution { public: void rotate(int nums[], int n, int k) { int nowIndex = 0, nextIndex; int tmp1, tmp2 = nums[0]; for(int j=0,i=0; j<n; j++){ tmp1 = tmp2; nowIndex = (k + nowIndex) % (n); tmp2 = nums[nowIndex]; nums[nowIndex] = tmp1; if(nowIndex == i) { nowIndex = ++i; tmp2 = nums[nowIndex]; } } } };
原文:http://www.cnblogs.com/UnGeek/p/5503610.html