题目链接

  题目要求:

  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.

  Hint:
  Could you do it in-place with O(1) extra space?

  Related problem: Reverse Words in a String II

  Credits:
  Special thanks to @Freezen for adding this problem and creating all test cases.

  这道题要注意的是:k可能比数组的大小还大。程序如下:

 1 class Solution {
 2 public:
 3     void permute(vector<int>& nums, int start, int end)
 4     {
 5         if(start > end)
 6             return;
 7             
 8         int sz = (end - start) / 2 + 1;
 9         for(int i = 0; i < sz; i++)
10         {
11             int tmp = nums[start+i];
12             nums[start+i] = nums[end-i];
13             nums[end-i] = tmp;
14         }
15     }
16     
17     void rotate(vector<int>& nums, int k) {
18         int sz = nums.size();
19         if(sz <= k)
20             k -= sz;
21         if(k == 0)
22             return;
23         permute(nums, 0, sz - k - 1);
24         permute(nums, sz - k, sz - 1);
25         permute(nums, 0, sz - 1);
26     }
27 };