<BackTracking> permutation 254 47 60
254. Factor Combinations
class Solution {
public List<List<Integer>> getFactors(int n) {
List<List<Integer>> res = new ArrayList<>();
//corner case
if(n < 4) return res;
dfs(n, 2, res, new ArrayList<Integer>());
return res;
} private void dfs(int n, int index, List<List<Integer>> res, List<Integer> subset){
if(n == 1){
if(subset.size() > 1){
res.add(new ArrayList<Integer>(subset));
}
return;
}
//拆解
for(int i = index; i <= n; i++){
if(i > n / i) break;
if(n % i == 0){
subset.add(i);
dfs(n / i, i, res, subset);
subset.remove(subset.size() - 1);
}
}
subset.add(n);
dfs(1, n, res, subset);
subset.remove(subset.size() - 1);
}
}
47. Permutations II
有重复元素: gren tea
nums[i] == nums[i - 1] && !visited[i - 1] continue. 两数相等直接跳过。 !visited[i - 1] 如果前面的数字没选取过,则不能选后面这个相同的数字
//排列(雨露均沾)
//nums[i] == nums[i - 1] && !visited[i - 1] continue. 两数相等直接跳过
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
//corner case
if(nums == null || nums.length == 0) return res;
Arrays.sort(nums);
boolean[] visited = new boolean[nums.length];
for(int i = 0; i < nums.length; i++){
visited[i] = false;
}
dfs(nums, res, new ArrayList<Integer>(), visited);
return res;
} private void dfs(int[] nums, List<List<Integer>> res, List<Integer> subset, boolean[] visited){
if(subset.size() == nums.length){
res.add(new ArrayList<Integer>(subset));
return;
}
for(int i = 0; i < nums.length; i++){
if(visited[i]) continue;
if(i >= 1 && nums[i] == nums[i - 1] && !visited[i - 1]) continue;
subset.add(nums[i]);
visited[i] = true;
dfs(nums, res, subset, visited);
subset.remove(subset.size() - 1);
visited[i] = false;
} }
}
60. Permutation Sequence
例: n = 4, k = 14。
k 转化为 第k个数的下标,则k--。 eg: k = 13(只需做一次)
1.每次第一顺位的数值 :at = k / (n - 1)!。 at = 13 / 3! = 2。
第二顺位数字的位置: k = k % (n - 1)!。 k = 13 % 3! = 1。 ans = 3。 对于以3为开头的6个数字中,第二顺位数字排在第2位。
2. at = k / (n - 1)!。 at = 1 / 2! = 0。 k''的排第2,剩下数字的周期是 2!。
k = k % (n - 1)。 k = 1 % 2! = 1。 ans = 31。
3. at = k / 1!。 at = 1 / 1 = 1。
k = k % 1!。 k = 1 % 1 = 0。 ans = 314。
4。 at = k / 1。 at = 0。 ans =3142。
class Solution {
public String getPermutation(int n, int k) {
List<String> table = new LinkedList<>(map(n));
if(n == 1) return table.get(0);
k--;
String ans = "";
while(n > 0){
int kth = kth(n--);
int at = k / kth;
k %= kth;
ans += table.get(at);
table.remove(at);
}
return ans;
} public List<String> map(int n){
String s = "1,2,3,4,5,6,7,8,9";
List<String> list = Arrays.asList(s.split(","));
return list;
} public int kth(int n){
int t = 1;
for(int i = 1; i < n; i++){
t *= i;
}
return t;
}
}
<BackTracking> permutation 254 47 60的更多相关文章
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- All LeetCode Questions List 题目汇总
All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...
- LeetCode All in One 题目讲解汇总(转...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通 ...
- Pandas的高级操作
pandas数据处理 1. 删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True keep参数: ...
- 获取文本的编码类型(from logparse)
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- PROJ4初探(转并整理格式)
PROJ4初探(转并整理格式) Proj4是一个免费的GIS工具,软件还称不上. 它专注于地图投影的表达,以及转换.采用一种非常简单明了的投影表达--PROJ4,比其它的投影定义简单,但很明显.很容易 ...
- ZAM 3D 制作简单的3D字幕 流程(二)
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
- Google的IP地址一览表,加上代理服务器
Bulgaria 93.123.23.1 93.123.23.2 93.123.23.3 93.123.23.4 93.123.23.5 93.123.23.6 93.123.23.7 93.123. ...
- google(转帖)
本帖最后由 qiushui_007 于 2014-6-10 16:14 编辑 IP Addresses of Google Global Cachewww.kookle.co.nr Bulgaria ...
随机推荐
- 2个ajax的相互调用解决异步问题
- 第05组 Beta冲刺(4/4)
第05组 Beta冲刺(4/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了哪 ...
- 修改SQL Server中的计算机名
安装SQL Server之后,如果修改计算机名会导致登录异常,或者某些功能不能用,例如配置Replication时会提示如下错误: SQL Server replication requires th ...
- 前端 web mime类型引起的 常见404错误
mime 类型设置参考https://www.w3school.com.cn/media/media_mimeref.asp
- njnja 安装
git clone git://github.com/ninja-build/ninja.git && cd ninja 安装re2c wget https://kojipkgs.f ...
- windows 10使用vscode进行远程代码开发 | tutorial to use vscode for remote development using ssh on windows
本文首发于个人博客https://kezunlin.me/post/c93b6ba6/,欢迎阅读最新内容! tutorial to use vscode for remote development ...
- Pull Request找原作者做review
最近对代码库进行了一次全局替换,改了150个左右的文件,发了PR后需要找原作者确认一下,于是写了个工具做git blame,地址在这里 写完发现一个问题,如果只是新增一个函数,没有调用,是应该不用找原 ...
- python 遍历一个数组
list_test =[1,2,3,4,5] for i in range(0,len(list_test)): print(i) 结果是 1 2 3 4 5 注意 for i in range 是前 ...
- IDEA构建spring项目
这两天使用IDEA从零构建一个spring项目,之所以说从零,是因为,我这个小白呢,之前IDEA没有碰过,spring也只是知道个名字. 因为没有文档,遇到了好些坑,把这些记录一下吧. 构建的第一步, ...
- [b0033] python 归纳 (十八)_队列Queue在多线程中使用(二)
# -*- coding: UTF-8 -*- """ 多线程同时读队列 使用 join(), task_done() 逻辑: 3个子线程并发 从有6个数据的队列中取数据 ...