你有一套活字字模 tiles
,其中每个字模上都刻有一个字母 tiles[i]
。返回你可以印出的非空字母序列的数目。
注意:本题中,每个活字字模只能使用一次。
示例 1:
输入:"AAB"
输出:8
解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。
示例 2:
输入:"AAABBC"
输出:188
提示:
1 <= tiles.length <= 7
tiles
由大写英文字母组成
思路:用hashmap来存储每个字符的个数,然后依次遍历
class Solution {
int num;
public int numTilePossibilities(String tiles) {
if(tiles == null || tiles.length() <= 0) return 0;
char ch[] = tiles.toCharArray();
num = 0;
HashMap<Character,Integer> hm = new HashMap<>();
for(char c : ch) {
if(hm == null || !hm.containsKey(c)) hm.put(c,1);
else hm.put(c,hm.get(c)+1);
}
help(ch,hm);
return num;
}
private void help(char[] ch,HashMap<Character,Integer> hm){
for(Map.Entry<Character, Integer> c : hm.entrySet()){
if(c.getValue() <=0) continue;
else {
num++;
hm.put(c.getKey(),c.getValue()-1);
help(ch,hm);
hm.put(c.getKey(),c.getValue()+1);
}
}
}
}