AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3803. 猜密码

中等通过率 44% · 提交 433 · 通过 190
回溯枚举排序

小慕设置了一个保密柜,但自己不小心忘记了密码。 他只记得密码全部由数字组成,而且所有数字都不重复。 请你根据他记住的数字范围和密码的最少数字个数,帮他找出所有可能的。 规则如下: 输出的组合必须从可选的数字范围中选取,且数字不能重复; 输出的密码数字要按照从小到大的顺序排列,密码组合需要按照字母顺序,从小到大的顺序排序。 输出的每个组合包含的数字数量要大于等于密码的最少数字个数; 如果可能的组合为空,则返回"None"。

提示:带虚线的词点一下有通俗解释。

输入描述

<p> 输入的第一行是可能的密码数字列表,数字间以半角逗号分隔 </p> <p> 输入的第二行是密码最小数字数量 </p>

输出描述

<div data-page-id="NOBYdTomVosS2KxgSRPceIQgnNd" data-docx-has-block-data="false"> <div style="white-space-collapse:preserve;" class="ace-line ace-line old-record-id-PpEpdcOFjogqehxFqY7cFBGHnHg"> 可能的密码组合,每种组合显示成一行,每个组合内部的数字以半角逗号分隔,从小到大的顺序排列。 输出的组合间需要按照字典序排序。比如:<code>2,3,4</code> 放到 <code>2,4</code> 的前面 </div> </div> <span data-lark-record-data="{"rootId":"NOBYdTomVosS2KxgSRPceIQgnNd","text":{"initialAttributedTexts":{"text":{"0":"可能的密码组合,每种组合显示成一行,每个组合内部的数字以半角逗号分隔,从小到大的顺序排列。\n输出的组合间需要按照字典序排序。比如:2,3,4 放到 2,4 的前面"},"attribs":{"0":"*0|1+1a*0+a*0*1+5*0+4*0*2+5*0+4*0*2+3*0+4"}},"apool":{"numToAttrib":{"0":["author","7115054903550050305"],"1":["unli<x>nk","true"],"2":["inlineCode","true"]},"nextNum":3}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":15,"type":"text","selection":{"start":0,"end":81},"recordId":"PpEpdcOFjogqehxFqY7cFBGHnHg"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span>

示例

示例 1

输入

2,3,4
2

输出

2,3
2,3,4
2,4
3,4

说明:最小密码数量是两个,可能有三种组合:2,3、2,4、3,4;三个密码有一种:2,3,4

示例 2

输入

2,0
1

输出

0
0,2
2

说明:可能的密码组合,一个的有两种:0、2;两个的有一种:0,2

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
猜密码 - 回溯组合生成 数字列表: 2,3,4 最小数量: 2 回溯过程 [] [2] [3] [4] [2,3] [2,4] [3,4] [4] [2,3,4] 输出组合 2,3 2,3,4 2,4 3,4
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「猜密码」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。