本题思路为:连环跳,如:对于数组nums[1,2,3,4],k=2
在最外层设置一个for循环,循环次数就是元素的个数,因为每个元素都会移动一次自己的位置。
cur先为nums[0],然后nums[0]先跳到nums[3],然后将nums[3]存到tmp后,将nums[3]置为cur,判断next:如果next已经访问过了,则将cur置为next+1;若无,继续跳;
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int length = nums.size();
bool visited[length];
memset(visited, 0, sizeof(visited));
if (length > 1 && k>0 && length!=k)
{
int tmp1, tmp2;
int cur = 0;
tmp1 = nums[cur];
for (int i = 0; i < nums.size(); i++)
{
tmp2 = nums[(cur + k) % length];
nums[(cur + k) % length] = tmp1;
visited[cur] = 1;
tmp1 = tmp2;
cur = (cur + k) % length;
if (visited[cur])
{
cur++;
tmp1 = nums[cur];
}
for (int x = 0; x < nums.size(); x++)
printf("%d,", nums[x]);
cout << "cur=" << cur << endl;
}
}
}
};