题目在LeetCode上有就不赘述,下面直接列上两种不同解法。
1. 通过反转来实现旋转,这里旋转的方向可以选择,左转右转原理相同
class Solution {
public:
void Reverse(vector<int>& R, int l, int r){
int i,j;
i = l;
j = r;
for(i = l;i < j; ++i,--j){
swap(R[i],R[j]);
}
return;
}
void rotate(vector<int>& nums, int k) {
int l,r;
l=0;
r=nums.size();
k=k%r;
Reverse(nums,0,r-1);
Reverse(nums,0,k-1);
Reverse(nums,k,r-1);
return;
}
};
这里建议自己写一下反转函数,也可以调用内部函数reverse
2. 暴力解法,比较好想到的方法,就是直接靠循环来向右移动数组内的元素(时间效率不高,可能超出时间)
void rotate(int nums, int k) {
int i, j;
int n;
n = nums.size();
k = k % n;
//找一额外变量来保存每次循环时最后一个元素
int temp;
for (i = 0; i < k; i ++) {
temp = nums[n-1];
for (j = n-1; j > 0; --j)
{
nums[j] = nums[j-1];
}
nums[0] = temp;
}
}