zoukankan      html  css  js  c++  java
  • python3面试题:给一个数组,如果数组中有0,则在0后面追加一个0,整体的数组长度不变

    面试题

    给一个数组,如果数组中有0,则在0后面追加一个0,整体的数组长度不变,要求不能生成新的数组,只能在当前数组下操作
    输入:
    arr = [1, 2, 4, 0, 5, 0, 9, 6]
    期望输出:
    [1,2,4,0,0,5,0,0]

    解决思路

    使用递归,每次找到列表中的0,在后面添加一个0,并移除最后一项,得到新的arr
    依次类推,第一次是从0位置开始,下一次从添加0后的位置继续

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    def func(index:int, arr:list):
        """
        如果数组中有0,则在0后面追加一个0,整体的数组长度不变
        :param index: index是a的索引
        :param arr: 传入数组
        :return: func()函数 index从插入的位置,继续递归
        """
        if index >= len(arr)-1:
            return arr
        for i in range(index, len(arr)):
            if arr[i] == 0:
                arr.insert(i+1, 0)  # 插入0
                arr.pop()           # 移除最后一个
                return func(i+2, arr)   # 递归
    
    if __name__ == '__main__':
        arr = [1, 2, 4, 0, 5, 0, 9, 6]
        print(func(0, arr))
    

    运行结果:[1, 2, 4, 0, 0, 5, 0, 0]

  • 相关阅读:
    [美团 CodeM 初赛 Round A]最长树链
    [POI2005]Toy Cars
    [CodePlus2017NOV]晨跑
    [JLOI2011]不重复数字
    [NEERC2007][SHOI2008]Cactus Reloaded
    [NOI2015]软件包管理器
    [HAOI2015]树上操作
    CF1097D Makoto and a Blackboard
    Luogu P5339 [TJOI2019]唱、跳、rap和篮球
    HNCPC2019H 有向图
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/15120394.html
Copyright © 2011-2022 走看看