Python——LeetCode刷题——【189. 轮转数组】

题目描述:

在这里插入图片描述

解题思路:

方法一:

首先对k进行分类讨论。
(1)当k < 列表长度 的时候,我们直接截取数组后k个元素,放入temp列表中。然后将剩下的元素,向右移动k个位置。最后将temp中的元素倒序放入原列表nums的前面即可。
(2)当k > 列表长度的时候,我们得先让k对列表长度取模,之后采取和(1)一样的处理方式。

代码与注释:

class Solution:
    def rotate(self, nums, k):
        """
        Do not return anything, modify nums in-place instead.
        """
        temp = []
        # 指向列表中的最后一个元素
        i = len(nums) - 1
        count = 0
        # 这一步相当关键,是为了避免k大于列表长度
        k =  k % len(nums)
        while (True):
            if count == k:
                break
            temp.append(nums[i])
            i -= 1
            count += 1


        # 将剩下的元素,向右移动k个位置
        while(i >= 0):
            nums[i + k] = nums[i]
            i -= 1

        # 将之前temp的元素倒序全部放到nums的最前面
        j = len(temp) - 1
        k = 0
        while (j >= 0):
            nums[k] = temp[j]
            k += 1
            j -= 1

结果:

在这里插入图片描述

方法二:

(1)确定k,当k<列表长度时,k=k;当k>列表长度时,k应该对列表长度取模。所以第一步就应该是k = k%列表长度。
(2)巧用切片,将右边的k个元素放到列表最前面,将剩下的元素放到后面。达到了向右轮转了k个元素的效果!

代码与注释:

class Solution:
    def rotate(self, nums, k):
        """
        Do not return anything, modify nums in-place instead.
        """
        # 获取列表长度
        n = len(nums)
        # 得到真正的k
        k = k % n
        # 巧用切片
        nums[:] = nums[n-k : ] + nums[: n-k]

结果:

在这里插入图片描述

难点:

得考虑到k可能小于列表长度,也可能大于等于列表长度,所以得让k对列表长度取模。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值