1. Problem Description
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.
用三种不同的方法解决数字向后旋转k位的问题。
2. My solution1 (另开空间)
最简单的方法,另用一个数组,把从第k开始的元素依次输入进res里。
void rotate(vector<int>& nums, int k) {
int len=nums.size();
vector<int>res;
if(k>=len)
k-=(k/len)*len;
for(int i=len-k;i<len;i++)
res.push_back(nums[i]);
for(int i=0;i<len-k;i++)
res.push_back(nums[i]);
nums.clear();
for(int i=0;i<len;i++)
nums.push_back(res[i]);
}
3. My solution2(后移)
把所有元素向后移动k位,再把最后k个补到前面
void rotate(vector<int>& nums, int k)
{
int len=nums.size();
k%=len;
for(int i=0; i<k; i++) nums.push_back(0);
vector<int>::iterator It=nums.begin();
for(int i=len-1; i>=0; i--)
{
nums[i+k]=nums[i];
It++;
}
for(int i=0; i<k; i++)
{
nums[i]=nums[len];
It=nums.erase(It);
}
}