字节面试题 小于n的最大数
原题描述
def getMaxNumbers(nums,n):
b=n
res=[]
l=[]
while (n//10)!=0:
res.insert(0,n%10)
n//=10
res.insert(0,n)
nums.sort()
flag=0
if n<min(nums):
return None
if res[0]<nums[0]:
s=[]
for i in range(len(res)-1):
s.append(str(max(nums)))
return int(''.join(s))
for i in res:
if i in nums and flag==0:
l.append(i)
else:
if flag==1:
l.append(max(nums))
continue
if i<min(nums):
if nums.index(l[-1])==0:
l.pop()
l.append(max(nums))
flag=1
else:
l.append(nums[nums.index(l.pop())-1])
l.append(max(nums))
flag=1
if i>min(nums):
l.append(sorted(nums,key=lambda x:abs(x-i))[0])
flag=1
l1=map(str,l)
a=int(''.join(l1))
if a==b:
y=-1
while abs(y)<=len(l):
if nums.index(l[y])==0:
l[y]=max(nums)
y-=1
else:
l[y]=nums[nums.index(l[y])-1]
break
if abs(y)-1==len(l):
l.pop(0)
return int(''.join(map(str,l)))
else:
if len(l)<len(res):
l[0]=max(nums)
return (int(''.join(map(str,l))))
return (a)
b=n
res=[]
l=[]
while (n//10)!=0:
res.insert(0,n%10)
n//=10
res.insert(0,n)
nums.sort()
flag=0
if n<min(nums):
return None
if res[0]<nums[0]:
s=[]
for i in range(len(res)-1):
s.append(str(max(nums)))
return int(''.join(s))
for i in res:
if i in nums and flag==0:
l.append(i)
else:
if flag==1:
l.append(max(nums))
continue
if i<min(nums):
if nums.index(l[-1])==0:
l.pop()
l.append(max(nums))
flag=1
else:
l.append(nums[nums.index(l.pop())-1])
l.append(max(nums))
flag=1
if i>min(nums):
l.append(sorted(nums,key=lambda x:abs(x-i))[0])
flag=1
l1=map(str,l)
a=int(''.join(l1))
if a==b:
y=-1
while abs(y)<=len(l):
if nums.index(l[y])==0:
l[y]=max(nums)
y-=1
else:
l[y]=nums[nums.index(l[y])-1]
break
if abs(y)-1==len(l):
l.pop(0)
return int(''.join(map(str,l)))
else:
if len(l)<len(res):
l[0]=max(nums)
return (int(''.join(map(str,l))))
return (a)
个人写的菜鸟级的面向用例编程