|
10 | 10 | # |
11 | 11 |
|
12 | 12 | class Solution: |
13 | | - # @param nums, a list of integer |
14 | | - # @param k, num of steps |
15 | | - # @return nothing, please modify the nums list in-place. |
| 13 | + """ |
| 14 | + :type nums: List[int] |
| 15 | + :type k: int |
| 16 | + :rtype: void Do not return anything, modify nums in-place instead. |
| 17 | + """ |
| 18 | + |
16 | 19 | def rotate(self, nums, k): |
17 | 20 | k %= len(nums) |
18 | 21 | self.reverse(nums, 0, len(nums)) |
19 | 22 | self.reverse(nums, 0, k) |
20 | 23 | self.reverse(nums, k, len(nums)) |
21 | | - |
| 24 | + |
22 | 25 | def reverse(self, nums, start, end): |
23 | 26 | while start < end: |
24 | | - nums[start], nums[end-1] = nums[end-1], nums[start] |
| 27 | + nums[start], nums[end - 1] = nums[end - 1], nums[start] |
25 | 28 | start += 1 |
26 | 29 | end -= 1 |
27 | 30 |
|
| 31 | + def rotate2(self, nums, k): |
| 32 | + """ |
| 33 | + :type nums: List[int] |
| 34 | + :type k: int |
| 35 | + :rtype: void Do not return anything, modify nums in-place instead. |
| 36 | + """ |
| 37 | + nums[:] = nums[len(nums) - k:] + nums[:len(nums) - k] |
| 38 | + |
| 39 | + |
28 | 40 | from fractions import gcd |
29 | 41 |
|
| 42 | + |
30 | 43 | class Solution2: |
31 | | - # @param nums, a list of integer |
32 | | - # @param k, num of steps |
33 | | - # @return nothing, please modify the nums list in-place. |
| 44 | + """ |
| 45 | + :type nums: List[int] |
| 46 | + :type k: int |
| 47 | + :rtype: void Do not return anything, modify nums in-place instead. |
| 48 | + """ |
| 49 | + |
34 | 50 | def rotate(self, nums, k): |
35 | 51 | k %= len(nums) |
36 | 52 | num_cycles = gcd(len(nums), k) |
37 | 53 | cycle_len = len(nums) / num_cycles |
38 | 54 | for i in xrange(num_cycles): |
39 | 55 | self.apply_cycle_permutation(k, i, cycle_len, nums) |
40 | | - |
| 56 | + |
41 | 57 | def apply_cycle_permutation(self, k, offset, cycle_len, nums): |
42 | 58 | tmp = nums[offset] |
43 | 59 | for i in xrange(1, cycle_len): |
44 | | - nums[(offset+i*k) % len(nums)], tmp = tmp, nums[(offset+i*k) % len(nums)] |
| 60 | + nums[(offset + i * k) % len(nums)], tmp = tmp, nums[(offset + i * k) % len(nums)] |
45 | 61 | nums[offset] = tmp |
46 | | - |
| 62 | + |
| 63 | + |
47 | 64 | if __name__ == '__main__': |
48 | | - nums = [1,2,3,4,5,6,7] |
| 65 | + nums = [1, 2, 3, 4, 5, 6, 7] |
49 | 66 | Solution().rotate(nums, 3) |
50 | 67 | print nums |
0 commit comments