zoukankan      html  css  js  c++  java
  • 力扣 2021.01.08

    189 旋转数组

    题目

    解法

    本文提供两种方法:

    1. 暴力破解法
    顾名思义,我们需要不停地插入、删除新节点,知道此数组完成旋转为止。
    代码如下:

    class Solution:
        def rotate(self, nums: List[int], k: int) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            if k < 0: return nums 
            temp = k % len(nums)   #移动步数
            while temp > 0:
                nums.insert(0, nums[-1])  #在数组头建立新节点,并将数组尾的元素插入
                del nums[-1]              #删除数组尾的元素
                temp -= 1
        
            return nums
    

    这种方法其实真的很暴力,但是空间复杂度,勉强可以达到O(1)。。。 :-}

    运行结果:

     
    2. py切片翻转
    在各个编程语言中,py的切片是非常有特点的。我们可以通过它来实现此功能。
    代码如下:

    class Solution:
        def rotate(self, nums: List[int], k: int) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            if k < 0: return nums
            temp = k % len(nums)                 #移动步数 
            nums.reverse()                       #数组全翻转
            nums[:temp] = nums[:temp][::-1]      #翻转移动到前面的元素
            nums[temp:] = nums[temp:][::-1]      #翻转移动到后面的元素
    
            return nums
    

    相比方法1, 方法2强了不少。文明好懂,哈哈哈:-)
    运行结果:

  • 相关阅读:
    程序格式
    java数据类型
    java-helloworld
    原生字符串
    字符串常见操作19个操作
    字符串函数操作
    【字符串切片操作和range函数用法】
    【字符串拼接之两种方法】
    C#中ref和out的区别使用
    c语言内部函数、外部函数多文件编译总结(vs2015编译环境)
  • 原文地址:https://www.cnblogs.com/young233/p/14250264.html
Copyright © 2011-2022 走看看