
0815:携程笔试
发布日期:2021-05-08 01:41:29
浏览次数:17
分类:原创文章
本文共 660 字,大约阅读时间需要 2 分钟。
有a、b两种长度的瓷砖,从中任选k块,输出所有可能铺出的道路长度
# 有a、b两种长度的瓷砖,从中任选k块,输出所有可能铺出的道路长度def divingBoard(a,b,k): if k==0: return [] else: ans=set() for i in range(0,k+1): sum=i*a+(k-i)*b ans.add(sum) return list(sorted(ans))print(divingBoard(1,2,3))
方法二:深度优先搜索
ans=set()K=3# 这里必须要这样定义一个数组并且初始化,用来代表对应位置要放置的元素,其实只用到了[0,k]的范围ans1=[0 for i in range(10)]# 不能定义一个空的列表,之后使用append加入新元素# ans1=[]def dfs(a,b,k): nums=[a,b] if k==K: ans.add(sum(ans1[:k])) return for num in nums: # ans1.append(num) # 如果用ans1=[]进行初始化,这里就只能使用append添加元素,是不能得到正确结果的 ans1[k]=num dfs(a,b,k+1)dfs(1,2,0)print(list(ans))