python解LeeCode 形成三的最大倍数

原题目

给定你一个数组arry,你可以通过任意顺序链接其中某些数字形成3的倍数,请你返回所能得到的最大的3的倍数,由于答案可能不在整数数据范围内,请你以字符串形式返回答案。
如果无法得到,请返回一个空字符串。

代码块

def func(Array = [0,0,0]):
    Array0=[];Array1=[];Array2=[]

    for i in range(len(Array)):
        if Array[i] % 3 == 0:
            Array0.append(Array[i])
        elif Array[i] % 3 == 1:
            Array1.append(Array[i])
        elif Array[i] % 3 == 2:
            Array2.append(Array[i])

    Array0.sort();Array0= Array0[::-1]
    Array1.sort();Array1= Array1[::-1]
    Array2.sort();Array2= Array2[::-1]

    Array0+= Array1[ 0:(len(Array1)-len(Array1)%3) ] +Array2[ 0:(len(Array2)-len(Array2)%4) ]
    Array1 = Array1[ (len(Array1)-len(Array1)%3):len(Array1) ]
    Array2 = Array2[ (len(Array2)-len(Array2)%4):len(Array2) ]


    mini = min(len(Array1),len(Array2))

    Array0+=Array1[0:mini]+Array2[0:mini]
    Array0.sort();Array0= Array0[::-1]
    strList = [str(x) for x in Array0]
    if len(set(strList)) == 1 and strList[0] == '0':
        return '0'
    else:
        return "".join(strList)

解题思路

第一次遍历列表,把能被3整除的数放入Array0,把被3除余1的数放入Array1,把被3除余2的数放入Array2。

接着对Arry0,Arry1,Arry2进行降序排列,使得数据最大。

接着对Arry1内数据段除3切片,根据计算可以知道,Array1内数据每3个相加能得到被3整除的数据
接着对Arry2内数据段除4切片,根据计算可以知道,Array2内数据每4个相加能得到被3整除的数据

接着Array1,Array2把剩余的数据替换原来的列表

求出Arry1,Array2最短的长度,并对其进行切片放入Arry0

最后再次对Arry0进行降序排列就可以得出最后结果

把最后结果转化为字符串即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值