注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
189. Rotate Array
https://leetcode.com/problems/rotate-array/
不太理解,为啥这个start也要循环? 我的理解是,从start=0开始,就一撸到底了,为啥要这么写。
此外,大家有推荐的更好的in-place的写法吗? 我觉得我这个代码有点绕啊。。。
代码如下,
class Solution {
/** Using Cyclic Replacements | no extra space **/
public void rotate(int[] nums, int k) {
/** 1. 對 k 取模 **/
k = k % nums.length;
/** 2. 數目 **/
int count = 0;
/** 3. 只要count没超过总长度。问题: start什么时候会++ **/
for (int start = 0; count < nums.length; start++) {
/** ~1 預留當前位置 **/
int current = start;
/** ~2 拿到原始位置的值 **/
int prev = nums[start];
do {
int next = (current + k) % nums.length; // 获取下一坐标的位置
int temp = nums[next]; // 获取下一坐标对应的值
nums[next] = prev; // 更新下一坐标的值
count++; // 更新完后,count加一
prev = temp; // 把 "下一坐标对应的值(存在于temp)", 给prev
current = next; // 更新当前位置,为"下一坐标对应位置"
} while (start != current);
}
}
}
|