|
36 | 36 | ## 解法
|
37 | 37 | <!-- 这里可写通用的实现逻辑 -->
|
38 | 38 |
|
| 39 | +若 `k=3`,`nums=[1,2,3,4,5,6,7]`。 |
| 40 | + |
| 41 | +先将 `nums` 整体翻转: |
| 42 | + |
| 43 | +`[1,2,3,4,5,6,7]` -> `[7,6,5,4,3,2,1]` |
| 44 | + |
| 45 | +再翻转 `0~k-1` 范围内的元素: |
| 46 | + |
| 47 | +`[7,6,5,4,3,2,1]` -> `[5,6,7,4,3,2,1]` |
| 48 | + |
| 49 | +最后翻转 `k~n-1` 范围内的元素,即可得到最终结果: |
| 50 | + |
| 51 | +`[5,6,7,4,3,2,1]` -> `[5,6,7,1,2,3,4]` |
39 | 52 |
|
40 | 53 | <!-- tabs:start -->
|
41 | 54 |
|
42 | 55 | ### **Python3**
|
43 | 56 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
44 | 57 |
|
45 | 58 | ```python
|
46 |
| - |
| 59 | +class Solution: |
| 60 | + def rotate(self, nums: List[int], k: int) -> None: |
| 61 | + """ |
| 62 | + Do not return anything, modify nums in-place instead. |
| 63 | + """ |
| 64 | + n = len(nums) |
| 65 | + k %= n |
| 66 | + if n < 2 or k == 0: |
| 67 | + return |
| 68 | + nums[:] = nums[::-1] |
| 69 | + nums[:k] = nums[:k][::-1] |
| 70 | + nums[k:] = nums[k:][::-1] |
47 | 71 | ```
|
48 | 72 |
|
49 | 73 | ### **Java**
|
50 | 74 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
51 | 75 |
|
52 | 76 | ```java
|
53 |
| - |
| 77 | +class Solution { |
| 78 | + public void rotate(int[] nums, int k) { |
| 79 | + if (nums == null) { |
| 80 | + return; |
| 81 | + } |
| 82 | + int n = nums.length; |
| 83 | + k %= n; |
| 84 | + if (n < 2 || k == 0) { |
| 85 | + return; |
| 86 | + } |
| 87 | + |
| 88 | + rotate(nums, 0, n - 1); |
| 89 | + rotate(nums, 0, k - 1); |
| 90 | + rotate(nums, k, n - 1); |
| 91 | + } |
| 92 | + |
| 93 | + private void rotate(int[] nums, int i, int j) { |
| 94 | + while (i < j) { |
| 95 | + int t = nums[i]; |
| 96 | + nums[i] = nums[j]; |
| 97 | + nums[j] = t; |
| 98 | + ++i; |
| 99 | + --j; |
| 100 | + } |
| 101 | + } |
| 102 | +} |
54 | 103 | ```
|
55 | 104 |
|
56 | 105 | ### **...**
|
|
0 commit comments