数组——3、旋转数组

给定一个数组,将数组中的元素向右移动k个位置,其中k为非负数。

示例:

输入: [1, 2, 3, 4, 5, 6, 7] 和 k = 3
输出: [5, 6, 7, 1, 2, 3, 4]
解释:
向右旋转 1 步:[7, 1, 2, 3, 4, 5, 6]
向右旋转 2 步:[6, 7, 1, 2, 3, 4, 5]
向右旋转 3 步:[5, 6, 7, 1, 2, 3, 4]

方法1:先翻转前n-k个字符,再翻转后k个字符,最后将整个字符串翻转,一共3次翻转。

class Solution:
    def rotate(self, nums, k):
    	l = len(nums)
    	k %= l
    	k1 = l - k
    	if k != 0:
    	    for i in range((k1 - 1) // 2 + 1):
                t1 = nums[i]
                nums[i] = nums[k1 - 1 - i]
                nums[k1 - 1 - i] = t1
            for j in range(k1,(k1 + l - 1) // 2 + 1):
                t2 = nums[j]
                nums[j] = nums[l - 1 + k1 - j]
                nums[l - 1 + k1 - j] = t2
            nums.reverse()

方法2:采用切片的方式(更简单省时)

class Solution:
    def rotate(self, nums, k):
    	l = len(nums)
    	k %= l
    	n = nums[-k:] + nums[:-k]
    	for i in range(l):
    	    nums[i] = n[i]

猜你喜欢

转载自blog.csdn.net/weixin_41605837/article/details/84559811