JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-11-29
目录

活字印刷Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

你有一套活字字模 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 由大写英文字母组成

# 思路

回溯

# 解法


class Solution {
    
    Set<String> seen = new HashSet<>();
    public int numTilePossibilities(String tiles) {
        char[] str = tiles.toCharArray();
        int n = str.length;
        boolean[] used = new boolean[n];
        backtrack("",str,used);
        return seen.size();
    }
    void backtrack(String s,char[] str,boolean[] used){
        int n = str.length;
        if (s != null && !s.equals("")){
            seen.add(s);
        }
        if (s.length() == n){
            return;
        }
        for (int i = 0;i < n;i++){
            if (used[i]){
                continue;
            }
            used[i] = true;
            backtrack(s + str[i],str,used);
            used[i] = false;
        }

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
09-07
02
1687. 从仓库到码头运输箱子 Java
09-07
03
1688. 比赛中的配对次数 Java
09-07
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式