目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客
GitHub同步刷题项目:
https://github.com/September26/java-algorithms
原题链接:力扣
描述:
你有一套活字字模 tiles
,其中每个字模上都刻有一个字母 tiles[i]
。返回你可以印出的非空字母序列的数目。
注意:本题中,每个活字字模只能使用一次。
示例 1:
输入:"AAB" 输出:8 解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。
示例 2:
输入:"AAABBC" 输出:188
示例 3:
输入:"V" 输出:1
提示:
1 <= tiles.length <= 7
tiles
由大写英文字母组成
解题思路:
* 解题思路: * 用一种最笨的办法,就是穷举所有可能。设置数组uses记录状态,如果用过了就设置为true,继续递归。递归完成设置回false。
代码:
public class Solution1079 {
public int numTilePossibilities(String tiles) {
if (tiles.length() == 1) {
return 1;
}
Set<String> set = new HashSet<>();
char[] chars = tiles.toCharArray();
boolean[] uses = new boolean[chars.length];
for (int i = 1; i < chars.length; i++) {
search(set, chars, uses, "");
}
return set.size() - 1;
}
private void search(Set<String> set, char[] chars, boolean[] uses, String str) {
set.add(str);
for (int i = 0; i < uses.length; i++) {
if (uses[i]) {
continue;
}
uses[i] = true;
search(set, chars, uses, str + chars[i]);
uses[i] = false;
}
}
}