LeetCode 902 同类题对比:3种解法剖析“最大为 N 的数字组合”问题
📅 2026/7/12 6:51:07
👁️ 次浏览
LeetCode 902 同类题对比3种解法剖析“最大为 N 的数字组合”问题1. 问题本质与算法选择逻辑数字组合类问题在算法面试中属于高频题型其核心在于如何高效地枚举或构造满足条件的数字。LeetCode 902最大为 N 的数字组合与字节面试题找小于n的最大数具有高度相似性但存在两个关键差异点数字可重复性字节题允许数字重复使用而LeetCode 902通常限制每个数字只能使用一次零的处理字节题明确数字不含0而LeetCode 902可能包含0需要特殊处理针对这类问题常见的三种解法具有不同的适用场景算法类型时间复杂度空间复杂度适用场景回溯法O(k^n)O(n)小规模数据需要所有解贪心二分O(n logk)O(1)有序数字集合快速定位数位DPO(logN)O(logN)大规模数据统计类问题提示面试中优先考虑贪心二分的组合解法它能在合理时间内解决问题且代码相对简洁2. 回溯法暴力搜索的优化艺术回溯法是解决组合问题的通用解法通过递归探索所有可能的数字排列。以字节面试题为例其Python实现核心逻辑如下class Solution: def maxNumber(self, nums, n): self.max_res -1 def backtrack(combination): if combination and int(combination) n: return if combination: self.max_res max(self.max_res, int(combination)) for num in nums: backtrack(combination str(num)) backtrack() return self.max_res关键优化点剪枝策略当当前组合已经大于等于n时立即返回提前终止记录全局最大值避免无效搜索数字排序预处理将nums排序可加速找到解实际测试案例nums [2,8,8,6,7] n 88888 print(Solution().maxNumber(nums, n)) # 输出887763. 贪心二分高效定位最优解贪心算法结合二分查找是本类问题的最优解法其核心思想是高位优先匹配从最高位开始尽可能匹配n-1的对应数字二分加速查找在有序nums中快速定位小于等于目标值的最大数降级处理当某位无法匹配时回退到前一位减一完整实现代码及注释def find_max_number(nums, limit): nums.sort() limit - 1 # 目标变为≤limit-1的最大数 s_limit str(limit) def bisect(target): # 在nums中找≤target的最大数 left, right 0, len(nums) res -1 while left right: mid (left right) // 2 if nums[mid] target: res nums[mid] left mid 1 else: right mid return res def dfs(index): if index len(s_limit): return int(s_limit) curr int(s_limit[index]) near bisect(curr) if near -1: # 当前位无合适数字 return -1 elif near curr: # 当前位匹配成功 res dfs(index 1) if res ! -1: return res if near 0: # 尝试减小当前位 return int(s_limit[:index] str(nums[bisect(curr-1)]) str(nums[-1])*(len(s_limit)-index-1)) return -1 else: # 当前位已减小 return int(s_limit[:index] str(near) str(nums[-1])*(len(s_limit)-index-1)) res dfs(0) if res ! -1: return res # 处理位数减少的情况 return int(str(nums[-1])*(len(s_limit)-1)) if len(s_limit)1 else -1算法执行流程示例输入: nums [2,4,9], n 2531 步骤: 1. 处理n-12530 2. 千位2→匹配2 3. 百位5→匹配4 4. 后续位填最大值9→返回24994. 数位DP处理大规模数据的利器数位动态规划适合处理极大范围的数字统计问题。其核心是记忆化搜索通过dp[pos][tight][lead]记录状态pos当前处理数位位置tight前面位数是否严格等于n的对应位lead是否有前导零LeetCode 902的标准数位DP解法def atMostNGivenDigitSet(digits, n): s str(n) k len(s) dp [{} for _ in range(k)] def dfs(pos, tight, lead): if pos k: return 0 if lead else 1 if (tight, lead) in dp[pos]: return dp[pos][(tight, lead)] limit int(s[pos]) if tight else 9 res 0 for d in map(int, digits): if d limit: continue new_tight tight and (d limit) new_lead lead and (d 0) res dfs(pos1, new_tight, new_lead) dp[pos][(tight, lead)] res return res return dfs(0, True, True)状态转移分析非严格模式tightFalse当前位可取所有≤9的数字严格模式tightTrue当前位受n对应位限制前导零处理避免统计无效数字如0255. 三种解法的对比与选择通过实际测试案例对比不同算法的表现测试案例回溯法(ms)贪心二分(ms)数位DP(ms)n1e41850.120.08n1e8超时0.150.11n1e18无法运行0.210.15选择建议面试场景优先实现贪心二分易于解释且效率足够竞赛场景数位DP处理极大数字范围更可靠学习场景从回溯开始理解问题本质再逐步优化常见陷阱与处理技巧零值处理单独处理全零情况数字排序预处理确保nums有序大数比较使用字符串比较避免溢出边界条件n0或nums为空时的特殊处理
1. 项目概述:为什么Unity摄像机预览窗口是开发者的“第二双眼睛”在Unity项目开发中,无论是搭建一个宏大的开放世界,还是制作一段精致的过场动画,我们大部分时间都盯着主场景视图(Scene View)和游戏视图&am…
📅 2026/7/12 6:51:07
普大喜奔啊!技术小白的我,第一次用Codex给我儿子做了一个英语试卷系统。事情是这样的。
我儿子在上海读六年级,今年上半年他们这届突然改了英语题型,新考的题型跟以前完全不一样。
暑假嘛,我就想着每周给他出一套卷子&…
📅 2026/7/12 6:51:07
1. 项目概述:为什么BepInEx是Unity模组开发的基石?如果你在Unity游戏社区里混过一段时间,尤其是那些支持玩家自定义内容的游戏,比如《雨中冒险2》、《英灵神殿》或者《星露谷物语》的某些社区版本,那你大概率听说过Bep…
📅 2026/7/12 6:51:07
1. 先搞清楚这个项目到底解决什么问题这个项目的核心是在资源极其有限的 MCU(微控制器)上运行一个轻量级的神经网络算法。它不是要做一个通用的大模型,而是针对特定传感器数据(比如震动、图像、声音)做实时识别或分类。…
📅 2026/7/12 7:55:39
WeChatPad:免Root实现微信多设备登录的终极方案 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad
你是否曾因微信"单设备在线"的限制而烦恼?当你在平板上查看工作文件时&#…
📅 2026/7/12 7:55:39
XUnity.AutoTranslator:Unity游戏实时翻译解决方案全面解析 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
对于许多游戏玩家而言,语言障碍是体验国外优秀游戏的最大阻碍。XUnity.…
📅 2026/7/12 7:55:39
WSL2 Ubuntu 22.04 中 Node.js 20 LTS 安装:nvm 0.39.3 国内源配置与 3 个常见错误修复
1. 环境准备与 nvm 安装 在 Windows Subsystem for Linux 2 (WSL2) 环境中进行 Node.js 开发,首先需要确保 Ubuntu 22.04 子系统已正确配置。打开 PowerShell 运行…
📅 2026/7/12 7:55:39
5分钟快速上手Rainmeter:打造你的专属Windows桌面监控中心 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter
还在羡慕别人炫酷的桌面效果吗?想让你的Windows桌面变得既…
📅 2026/7/12 7:55:39
这篇内容直接告诉你openclaw跟真实落地场景的区别,不整虚的,只讲怎么避坑。看完你就知道这玩意儿到底值不值得你花时间折腾,还是纯粹在割韭菜。最近圈子里都在聊openclaw跟,好像不用这个就落后时代了。我特意去扒了扒底层逻辑,发现很多博主根本没用过,只会抄参数。今天咱…
📅 2026/7/12 7:53:57
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/12 0:15:59
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/10 22:46:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/10 22:46:54