题目大意:与61题翻转链表有相似之处,只是一个是链表一个是数组。而数组翻转可以模拟矩阵翻转来做。
法一:将前面的数组翻转一次,后面的数组翻转一次,最后在整体翻转一次,就可以得到最后的结果。代码如下(耗时1ms):
1 public void rotate(int[] nums, int k) { 2 k = k % nums.length; 3 //翻转前面的数组 4 trueRotate(nums, 0, nums.length - k); 5 //翻转后面的数组 6 trueRotate(nums, nums.length - k, nums.length); 7 //整体翻转 8 trueRotate(nums, 0, nums.length); 9 } 10 //翻转数组 11 public void trueRotate(int[] nums, int s, int e) { 12 int mi = (s + e) / 2; 13 for(int i = s; i < mi; i++) { 14 int tmp = nums[i]; 15 nums[i] = nums[--e]; 16 nums[e] = tmp; 17 } 18 }