该题目在网上目前的答案很多,但是要么很长难以理解,要么答案根本就不对。最近看到了这位博主的博文:字节面试题:给定数字n,数组arr={1,3,5,2},求arr中的数字能组成小于n的最大整数_斯文流氓骚刚的博客-CSDN博客

深受启发,但原文仍有瑕疵,最终的答案可以等于N,而且有不必要的搜索。本文作了修改,使用python语言重写。

题目要求:给定一个数组arr=[2,3,4,5],N=2345,求使用arr中的数字,组成一个不大于N的最大的数字。arr中的数字可以多次使用。

思路:

首先将arr数组排序,之后使用深搜+贪心的思想,从第一位开始,尽量使用与对应位置相等的数字。如果有任意一位没有使用相等的数字,那在后面的所有位中都直接使用最大的数字即可。

递归终止条件:

1.已经考虑完了所有的位,那么应该返回0

2.在之前选择的基础上,此位置没有满足条件的选择,应当返回-1

边界情况:

1.如果前面都是用了相等的数字,那么最后一位选用的数字必须小于对应的数字。

2.如果在找第一位时,就发现都不相等,那不要立刻返回-1,而是应该放弃第一位,将后面的位都选择最大值。

代码如下:

from typing import List
"""
arr:可使用数字的数组
nums:目标数字对应的整数数组
preEq:之前是否每一位都使用了相等的值
index:当前考虑到了第几位,从0开始
函数语义:返回第index位后可组成的最大的数字,包括第index位
"""
def dfs(arr, nums,  preEq,  index):#如果考虑完了最后一位,那么能组成的最大值为0if index==len(nums):return 0if preEq:#如果前面使用的都是相等的数字for i in range(len(arr)-1,-1,-1):#从最大的往下排if index==len(nums)-1:if arr[i]<nums[index]:#在前面使用的都是相同的数字,那么最后一位的数字不能是相等的,这个看具体面试官的要求temp = dfs(arr, nums, arr[i] == nums[index], index + 1)if temp==-1:#向下深搜发现没有满足要求的值,则选用更小的数字continue# 向下深搜发现了满足要求的值,那说明我们找到结果了,把这一层的结果加进去,之后层层返回即可return arr[i] * pow(10,len(nums)-index-1) + tempelse:if arr[i]<=nums[index]:#非最后一位的数字是可以相等的temp = dfs(arr, nums, arr[i] == nums[index], index + 1)if temp == -1:continuereturn arr[i] * pow(10, len(nums) - index - 1) + temp#如果上面的for循环走完都没有return的话,那就说明这一层所有的数字都不满足要求#如果是第一个数字都无法满足的话,那就直接从第二位开始,将preEq置为False递归if index==0:return dfs(arr, nums, False, index + 1)# 如果上面的for循环走完都没有return的话,而且也不是第一位,那就返回-1,回退递归return -1else:#如果前面不是都选用了相等的数字,那就直接每次挑最大的数字就行了。return arr[len(arr)-1] * pow(10, len(nums) - index - 1) + dfs(arr, nums, False, index + 1)def find(N,arr: List[int]) -> int:arr.sort()nums = [int(i) for i in str(N)]#递归的初始条件,preEq=True,index=0return dfs(arr,nums,True,0)arrInputList = [
[2,3,4,5],
[2,3,4,5],
[2,3,4,5],
[2,3,4,5]
]
NList =   [1234,2234,2231,2134]
ansList = [555, 2233,2225,555]
for i in range(len(NList)):ans = find(NList[i], arrInputList[i])print(NList[i], arrInputList[i],ans)

以下内容无意义,因为CSDN说文章质量低。

沈腾,1979年10月23日出生于黑龙江省齐齐哈尔市,中国内地男演员、影视导演、编剧,开心麻花舞台剧签约艺人,毕业于解放军艺术学院戏剧表演系。

2003年出演开心麻花第一部舞台剧《想吃麻花现给你拧》 [1]  。2004年参演电视剧《青春正步走》。2006年出演话剧《我在天堂等你》。2012年首次登上央视春晚,并在春晚上表演小品《今天的幸福》,凭借小品中饰演的“郝建”获得广泛关注 [2]  。2013年再次登上央视春晚,并表演小品《今天的幸福2》;同年获得第2届中国大学生微电影节最佳男主角奖 [17]  ;4月25日获得第四届现代戏剧谷2013壹戏剧大赏年度新锐男演员奖 [3-4]  。2014年第三次登上央视春晚,表演小品《扶不扶》 [5]  ;4月参与电视剧《你是我的眼》的拍摄,在剧中饰演男主角张三斤 [6]  。2015年第四次登上央视春晚表演小品《投其所好》。2015年参加《欢乐喜剧人》第一季,并获得冠军 [7]  ;9月30日与马丽领衔主演的喜剧电影《夏洛特烦恼》上映 [312]  。

2016年特别出演的电影《王牌逗王牌》公映 [313]  。2017年在央视春晚上表演小品《一个女婿半个儿》 [9]  ;同年参演开心麻花第三部电影《羞羞的铁拳》 [10]  。2018年特别出演动作电影《龙虾刑警》 [314]  ;7月27日主演的电影《西虹市首富》全国公映 [11]  。2019年大年初一主演的电影《飞驰人生》 [12]  、《疯狂的外星人》同步上映 [13]  。2020年主演爆笑喜剧《创客联盟》;8月27日名列《2020福布斯中国名人榜》第28位 [14-15]  ;同年主演电影《独行月球》 [315]  。2021年大年初一主演的电影《你好,李焕英》上映 [316]  ;同年主演电影《光天化日》 [317]  。

字节面试题-小于N的最大数字相关推荐

  1. 试题 基础练习 特殊的数字

    试题 基础练习 特殊的数字 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3.编程求 ...

  2. 字节新专利可用人脸图像生成数字人;滴普科技获1.1亿元融资;科大讯飞成立人工智能科技公司 | 每日大事件...

    数据智能产业创新服务媒体 --聚焦数智 · 改变商业 01.字节新专利可用人脸图像生成数字人 近日,北京字跳网络技术有限公司申请的"数字人生成方法.装置.存储介质和电子设备"专利公 ...

  3. 剑指Offer(第二版)面试题56:数组中数字出现的次数

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/73609133冷血之心的博客) 剑指Offer(第二版)面试题56: ...

  4. 求根号2的小数点后10000位,字节面试题随想

    起因 昨天在群里有一个小伙伴发了一道字节后端的面试题, 题干是要求2\sqrt{2}2​的小数点后10000位, 经过自己的一些直观思考和网上查阅资料后, 大致有如下3种方案, 由于很多语言里的小数精 ...

  5. 华为机试题【10】-求数字基root

    题目描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 输入:输入任意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行对应一 ...

  6. 字节笔试题(含答案)

    个人博客欢迎访问 总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博主的数据结构与算法的代码笔记 目录 2019春招研发部分编程题 万万没想到之聪明的编辑(AC) ...

  7. 概率p输出1,概率1-p输出0,等概率输出0和1 【LeetCode】470. rand7()构造rand10() 系列变形(新浪、字节面试题)

    目录 1. 等概率输出0和1 1.1 题目描述 1.2 解题思路 & 代码 2. 以 1/N 的概率返回 1~N 之间的数 3. 给定函数rand5() 构造rand7() 或 rand7() ...

  8. mysql 数字占几个字节_mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  9. 艾为数字ic面试题_每日学习:数字后端面试100问(2019全新版)

    关注并标星大同学吧 每天1次,打卡学习 积累1个新知识,增1分职场底气 作者称谓:Tao涛 个人介绍:摸爬滚打多年的数字后端工程师 微信公众号:数字后端IC芯片设计 半导体知识分享第29期 技能升级, ...

最新文章

  1. 从Altium Designer导出PCB的3D模型至Solidworks
  2. html实现 左图右文_让CSS flex布局最后一行左对齐的N种方法
  3. CNN发展历史【从LeNet到DenseNet】
  4. some daily
  5. week03_python标准库datetime
  6. 删除亚马逊Kindle电子书的DRM,将AZW转为PDF格式文档
  7. 三色SM认证人脸动态视频制作教程
  8. css携程讲解,【译】CSS的布局数学:读懂calc – 携程设计委员会
  9. React Native 中使用图标
  10. w10桌面不显示计算机了,win10系统电脑开机后不显示桌面的详细方案
  11. Unity制作UFO小游戏
  12. java计算机毕业设计售楼系统源码+mysql数据库+系统+lw文档+部署
  13. Hrbust 1865 人类希望——kokoII【记忆化搜索】
  14. python函数进阶小结_python函数的进阶
  15. (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航...
  16. 20155318 《Java程序设计》实验四 (Android程序设计)实验报告
  17. 2018 年第二十三届全国青少年信息学奥林匹克联赛初赛
  18. 我的世界java版怎么用指令召唤幻术师_我的世界召唤指令大全 怎么用指令召唤生物...
  19. FPS透视原理(完)
  20. 福州大学计算机与科学学院,1:福州大学数学与计算机科学学院

热门文章

  1. java enum compare_Java中枚举类型
  2. c# mysql登录界面_C#窗体控件与MySQL实现登录功能
  3. 大青云不显示服务器,37大青云4月25日关服停止运营公告
  4. 类加载初始化顺序(nullpoint异常)
  5. Java---NullPoint经验解析
  6. 机电一体化T6113电气控制系统的设计(论文+DWG图纸)
  7. 梅森数形如2n−1的素数称为梅森数(Mersenne Number)
  8. Mysql 数据库——Mysql 数据库管理
  9. 【ARM 嵌入式 C 入门及渐进 4-- Linux 位图 bitmap】
  10. macd金叉kdj死叉的准确率_MACD金叉不涨又死叉