给定一个整数数组nums将数组中的元素向右轮转k个位置其中k是非负数。示例 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]提示1 nums.length 105-231 nums[i] 231 - 10 k 105解法一三次反转/** Do not return anything, modify nums in-place instead. */ function rotate(nums: number[], k: number): void { const nlnums.length if(nl0) return k k % nl function reserve(arr:number[],start:number,end:number):void{ while(startend){ [arr[start],arr[end]] [arr[end],arr[start]] start end-- } } reserve(nums,0,nl-1) reserve(nums,0,k-1) reserve(nums,k,nl-1) };解法二切片这个太妙了splicefunction rotate(nums: number[], k: number): void { const nl nums.length k % nl const tail nums.splice(nl-k) nums.unshift(...tail) };今日收获1.nums.splice(s)表示从数组的s索引包含开始删除剩下的元素并返回删除元素2.unshift表示在数组头部添加元素返回的是数组新长度3.k%nl等价与k k%nl为什么要取余数因为轮转k的次数如果是数组的长度则还是原来的数组比如数组[1,2,3,4,5,6,7] k10,轮转到7的时候就又是原来的数组了实际再轮转3次此时10-734.[a,b][b,a]这个是快速替换a和b两个元素等价于let temp a;ab;btemp;5.翻转3次①翻转整个列表②翻转前k-1的数据③翻转k剩下的数据