本题用到的是「计数(哈希表思想)+ 枚举」。要点在于:数组里同一个数字可能出现多次,它决定了某个数字在拼数时最多能用几次;而最终答案只要互不相同的整数,重复的数字不该产生重复答案。
给你一个长度为 n 的整数数组 digits,其中每个元素都是一个 0 到 9 之间的数字。数组中可能存在重复元素。
你需要找出所有满足下述条件且互不相同的整数:
例如,当 digits 为 1,2,3 时,可以构造出 132 和 312,它们都满足上述条件。
请将所有满足条件且互不相同的整数按照递增顺序输出。
第一行输入一个整数 n,表示数组 digits 的长度。
第二行输入 n 个整数 digitsi,表示数组中的各个数字,相邻数字之间用空格分隔。
3≤n≤100
0≤digitsi≤9
第一行输出一个整数 k,表示满足条件且互不相同的整数个数。
如果 k>0,第二行按照递增顺序输出这 k 个整数,相邻整数之间用空格分隔。
如果不存在满足条件的整数,即 k=0,则只输出一行 0。
输入
4
2 1 3 0
输出
10
102 120 130 132 210 230 302 310 312 320
说明
共有 10 个满足条件且互不相同的整数。
这些整数按照递增顺序排列为:
102,120,130,132,210,230,302,310,312,320
其中不包含奇数,也不包含带有前导零的整数。
输入
5
2 2 8 8 2
输出
7
222 228 282 288 822 828 882
说明
相同的数字可以在构造整数时重复使用,但使用次数不能超过该数字在数组 digits 中出现的次数。
例如,数字 8 在数组中出现了 2 次,因此构造 288、828 和 882 时都可以使用两个 8。
最终共有 7 个互不相同的整数。
输入
3
3 7 5
输出
0
说明
数组中的数字均为奇数,无法构造出满足条件的偶数,因此满足条件的整数个数为 0。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册