原题目
给定你一个数组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进行降序排列就可以得出最后结果
把最后结果转化为字符串即可