2. 旋转数组

91 阅读1分钟

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3

输出: [5,6,7,1,2,3,4]

解释:

向右轮转 1 步: [7,1,2,3,4,5,6]

向右轮转 2 步: [6,7,1,2,3,4,5]

向右轮转 3 步: [5,6,7,1,2,3,4]

解法一: unshift与pop
var rotate = function(nums, k) {
    let len = nums.length;
    let offset = k % len;
    for (let i = 0; i < offset; i++) {
        nums.unshift(nums.pop());
    }
    return nums;
};
解法二:splice与push
var rotate = function(nums, k) {
    let index = k % nums.length;
    if(index == 0){
        return nums;
    }else{
        // 这里slice也可以
        let left = nums.splice(0,nums.length - index);
        nums.push(...left)
    }
    return nums;
};
解法三:slice与concat
var rotate = function(nums, k) {
    let index = k % nums.length;
    let right = nums.slice(0,nums.length - index)
    let left = nums.slice(nums.length - index)
    let newArr = left.concat(right);
    for(let i = 0;i < nums.length;i ++){
        nums[i] = newArr[i]
    }
    return nums;
};