题目链接

Leetcode.1079 活字印刷 Rating : 1741

题目描述

你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。

注意:本题中,每个活字字模只能使用一次

示例 1:

输入:“AAB”
输出:8
解释:可能的序列为 “A”, “B”, “AA”, “AB”, “BA”, “AAB”, “ABA”, “BAA”。

示例 2:

输入:“AAABBC”
输出:188

示例 3:

输入:“V”
输出:1

提示:

  • 1 < = t i l e s . l e n g t h < = 7 1 <= tiles.length <= 7 1<=tiles.length<=7
  • tiles由大写英文字母组成

解法:回溯

我们先模拟一下 {A,A,B}


绿色的集合都是合法的方案。

我们发现只要同一层中不出现重复的字符,就不会有重复的方案。

我们用一个 布尔数组 vis来记录每个字符的被选择情况。

所以我们每次遇到重复的字符,都直接跳过。为了方便处理,我们可以将原串 tiles先排序。用一个变量 last记录上一次选择的字符,当前字符 s[u]last相同,就要跳过当前字符 s[u]的递归,再判断 s[u+1]

时间复杂度: O ( n ! + n l o g n ) O(n! + nlogn) O(n!+nlogn)

C++代码:

class Solution {public:int n,ans = 0;void dfs(string& s,vector<bool>& vis){char last = '#';for(int i = 0;i < n;i++){if(!vis[i] && s[i] != last){ans++;vis[i] = true;dfs(s,vis);vis[i] = false;last = s[i];}}}int numTilePossibilities(string tiles) {n = tiles.size();vector<bool> vis(n);sort(tiles.begin(),tiles.end());dfs(tiles,vis);return ans;}
};

Leetcode.1079 活字印刷相关推荐

  1. LeetCode 1079 活字印刷

    1079. 活字印刷 题目 思路 先计数,dfs组合枚举. 代码 class Solution {public:int numTilePossibilities(string tiles) {unor ...

  2. leetcode —— 1079. 活字印刷

    你有一套活字字模 tilestilestiles,其中每个字模上都刻有一个字母 tiles[i]tiles[i]tiles[i].返回你可以印出的非空字母序列的数目. 示例 1: 输入:"A ...

  3. LeetCode 1079. 活字印刷

    想看更多算法题,可以扫描上方二维码关注我微信公众号"数据结构和算法",截止到目前我已经在公众号中更新了500多道算法题,其中部分已经整理成了pdf文档,截止到目前总共有1000多页 ...

  4. 1079.活字印刷(Python)

    1079.活字印刷 你有一套活字字模tiles,其中每个字模上都刻有一个字母tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字模只能使用一次. 示例1: 输入:" ...

  5. 【leetcode】1079.活字印刷

    活字印刷 问题描述 问题分析 解决方案 问题描述 活字印刷 你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字 ...

  6. Leetcode刷题java之1079. 活字印刷

    可参考本博客回溯法专栏的最后一条的回溯法框架 https://blog.csdn.net/qq_41901915/article/details/104113330 执行结果: 通过 显示详情 执行用 ...

  7. Leetcode 1079:活字印刷

    题目描述 你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 示例 1: 输入:"AAB" 输出:8 解释:可能的序 ...

  8. 1079. 活字印刷

    你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字模只能使用一次. 示例 1: 输入:"AAB&qu ...

  9. 1079 活字印刷

    题目描述: 你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字模只能使用一次. 示例 1: 输入:" ...

最新文章

  1. 第2节 mapreduce深入学习:4, 5
  2. 微信小程序-封装http请求(ajax)
  3. 通过NVIDIA PilotNet,人人都能变成人工智能的老师
  4. 【Nginx】错误: [emerg] “proxy_pass“ cannot have URI part in location given by regular expression,...
  5. BZOJ 1683.City skyline 城市地平线
  6. 地球上最快的速度......
  7. 2017.4.1 kth_number 思考记录
  8. oracle表ddl,七、Oracle中DDL改变表结构操作
  9. 【美文赏析】世界上最遥远的距离
  10. 吴恩达神经网络和深度学习-学习笔记-20-训练/开发/测试集划分
  11. 在线表单收集系统Tduck(docker篇)
  12. 旧物手工机器人制作图片_自制送给小朋友的生日礼物,DIY帅气的不织布机器人...
  13. 使用kconfig生成autoconf.h
  14. 【备考初赛】1.1 计算机常识
  15. 【BZOJ2109/2535】【NOI2010】航空管制(贪心)
  16. VS2008 开发 Sharepoint Workflow 遇到的一些细节
  17. 新房装修步骤有哪些工序? 新房装修步骤要注意哪些问题?
  18. Unity之对模型材质球进行处理
  19. 赵小楼《天道》《遥远的救世主》深度解析(115)婚姻的观点
  20. HR是这样筛选简历的,不知道就完蛋!

热门文章

  1. 直播系统之高校‘视频校园’网络电视台应用方案
  2. DDR3 数据传输 (四)
  3. 强大好用的python绘图
  4. 大数据系列之日志数据实时分析计算
  5. 秒杀99%的海量数据处理面试题
  6. java面试设计题:羽毛球馆管理员;
  7. P2P--如何让下载的人越多速度越快
  8. Matlab中legend()函数:标注的显示及隐藏用法
  9. 几个好玩的在线编程网站
  10. CT原理与技术 第2章 扫描成像系统