编辑代码

// 暴力旋转
const rotate1 = function(nums, k) {
    let len = nums.length;
    for(let i = 0; i < k; i++) {
        let pivot = nums[len - 1];
        for(let j = len - 2; j >= 0; j--) {
            nums[j + 1] = nums[j];
        }
        nums[0] = pivot;
    }
    return nums;
};

// 用一个新数组
const rotate2 = function(nums, k) {
    let len = nums.length;
    const newarr = new Array(len);

    for(let i = 0; i < len; i++) {
        newarr[(i + k) % len] = nums[i];
    }

    return newarr;
}

// 每个元素step到正确的位置上(环形法)
const rotate3 = function(nums, k) {
    let len = nums.length;
    let kk = k % len;
    let count = 0;
    for (let i = 0; count < len; i++) {
        let start = i;
        let prev = nums[i];
        do {
            let next = (start + kk) % len;
            let temp = nums[next];
            nums[next] = prev;
            prev = temp;
            start = next;
            count++;
        } while(start !== i)
    }
    return nums;
};

function reverse(nums, start, end) {
    while(start < end) {
        let temp = nums[end];
        nums[end] = nums[start];
        nums[start] = temp;
        start++;
        end--;
    }
}
// 翻转法
const rotate4 = function(nums, k) {
    let kk = k % nums.length;
    reverse(nums, 0, nums.length - 1);
    reverse(nums, 0, kk - 1);
    reverse(nums, kk, nums.length - 1);

    return nums;
}

const arr1 = [1,2,3,4,5,6,7], k = 3;
console.log(rotate1(arr1, k));
const arr2 = [1,2,3,4,5,6,7];
console.log(rotate2(arr2, k));
const arr3 = [1,2,3,4,5,6,7];
console.log(rotate3(arr3, k));
const arr4 = [1,2,3,4,5,6,7];
console.log(rotate4([-1], 2));