|
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