文章目錄
- 1、問題
- 2、示例
- 3、解決方法
- (1)方法1——while遍歷(較為復雜,不推薦)
- (2)方法2(直接截取后插入,推薦)
- (3)方法3——優化方法2(一行解決)
- 總結
1、問題
給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。
2、示例
示例 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]
示例 2:
輸入:nums = [-1,-100,3,99], k = 2
輸出:[3,99,-1,-100]
解釋:
向右輪轉 1 步: [99,-1,-100,3]
向右輪轉 2 步: [3,99,-1,-100]
3、解決方法
(1)方法1——while遍歷(較為復雜,不推薦)
let nums = [1,2,3,4,5,6,7,8,9,10], k = 6
var rotate = function(nums, k) {// 1: 循環 k >= 1 k-- ,就是k有多大,循環多少次while(k>=1){// 2: 在數組的最前面插入 刪除最后的一個數據nums.unshift(nums.pop())k--;}// 3: 返回的數據console.log('res', nums);
};
rotate(nums, k)
(2)方法2(直接截取后插入,推薦)
let nums = [1,2,3,4,5,6,7,8,9,10], k = 6
var rotate = function(nums, k) {// 1: 切割k個數據,如[1,2,3,4,5,6,7,8,9,10], k = 3,獲取[8,9,10]let newNums = nums.splice(nums.length - k,nums.length)// 2: 將切割后的數組解構賦值插入到原數組到最前面nums.unshift(...newNums)// 3: 返回的數據console.log('res', nums);
};
rotate(nums, k)
(3)方法3——優化方法2(一行解決)
關鍵點: splice方法中的第一個參數可以為負數,從末尾開始計算。(這樣就可以直接截取后面k個數據放到最前面,比上面的簡單多了)
let nums = [1,2,3,4,5,6,7,8,9,10], k = 6
var rotate = function(nums, k) {// 思路和方法二是一樣的,區別是splice這個方法插入負數的使用方式nums.splice(0,0,...nums.splice(-k)) // 將后面截取的放到最前面console.log('res', nums);
};
rotate(nums, k)
總結
難度:中等
其他:在方法三中,你也可以使用unshift將截取多解構賦值插入,同方法二中類似。說這些是想說明思路很重要。