189. Rotate Array 发表于 2022-01-25 Math12345678910111213141516171819202122232425262728293031class Solution { public void rotate(int[] nums, int k) { k %= nums.length; if (k == 0) { return; } for (int i = 0; i < getGreatestCommonDivisor(nums.length, k); i++) { int targetIndex = (i + k) % nums.length; while (targetIndex != i) { swap(nums, i, targetIndex); targetIndex = (targetIndex + k) % nums.length; } } } private int getGreatestCommonDivisor(int a, int b) { if (b == 0) { return a; } return getGreatestCommonDivisor(b, a % b); } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }} 该方法完全是在草稿纸上找规律找出来的。 Reverse12345678910111213141516171819202122class Solution { public void rotate(int[] nums, int k) { k %= nums.length; reverse(nums, 0, nums.length - 1); reverse(nums, 0, k - 1); reverse(nums, k, nums.length - 1); } private void reverse(int[] nums, int i, int j) { while (i < j) { swap(nums, i, j); i++; j--; } } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }} Reference189. Rotate Array