Leetcode.1079 活字印刷
题目链接
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 活字印刷相关推荐
- LeetCode 1079 活字印刷
1079. 活字印刷 题目 思路 先计数,dfs组合枚举. 代码 class Solution {public:int numTilePossibilities(string tiles) {unor ...
- leetcode —— 1079. 活字印刷
你有一套活字字模 tilestilestiles,其中每个字模上都刻有一个字母 tiles[i]tiles[i]tiles[i].返回你可以印出的非空字母序列的数目. 示例 1: 输入:"A ...
- LeetCode 1079. 活字印刷
想看更多算法题,可以扫描上方二维码关注我微信公众号"数据结构和算法",截止到目前我已经在公众号中更新了500多道算法题,其中部分已经整理成了pdf文档,截止到目前总共有1000多页 ...
- 1079.活字印刷(Python)
1079.活字印刷 你有一套活字字模tiles,其中每个字模上都刻有一个字母tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字模只能使用一次. 示例1: 输入:" ...
- 【leetcode】1079.活字印刷
活字印刷 问题描述 问题分析 解决方案 问题描述 活字印刷 你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字 ...
- Leetcode刷题java之1079. 活字印刷
可参考本博客回溯法专栏的最后一条的回溯法框架 https://blog.csdn.net/qq_41901915/article/details/104113330 执行结果: 通过 显示详情 执行用 ...
- Leetcode 1079:活字印刷
题目描述 你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 示例 1: 输入:"AAB" 输出:8 解释:可能的序 ...
- 1079. 活字印刷
你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字模只能使用一次. 示例 1: 输入:"AAB&qu ...
- 1079 活字印刷
题目描述: 你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i].返回你可以印出的非空字母序列的数目. 注意:本题中,每个活字字模只能使用一次. 示例 1: 输入:" ...
最新文章
- 第2节 mapreduce深入学习:4, 5
- 微信小程序-封装http请求(ajax)
- 通过NVIDIA PilotNet,人人都能变成人工智能的老师
- 【Nginx】错误: [emerg] “proxy_pass“ cannot have URI part in location given by regular expression,...
- BZOJ 1683.City skyline 城市地平线
- 地球上最快的速度......
- 2017.4.1 kth_number 思考记录
- oracle表ddl,七、Oracle中DDL改变表结构操作
- 【美文赏析】世界上最遥远的距离
- 吴恩达神经网络和深度学习-学习笔记-20-训练/开发/测试集划分
- 在线表单收集系统Tduck(docker篇)
- 旧物手工机器人制作图片_自制送给小朋友的生日礼物,DIY帅气的不织布机器人...
- 使用kconfig生成autoconf.h
- 【备考初赛】1.1 计算机常识
- 【BZOJ2109/2535】【NOI2010】航空管制(贪心)
- VS2008 开发 Sharepoint Workflow 遇到的一些细节
- 新房装修步骤有哪些工序? 新房装修步骤要注意哪些问题?
- Unity之对模型材质球进行处理
- 赵小楼《天道》《遥远的救世主》深度解析(115)婚姻的观点
- HR是这样筛选简历的,不知道就完蛋!