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的更多相关文章

  1. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  2. All LeetCode Questions List 题目汇总

    All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...

  3. LeetCode All in One 题目讲解汇总(转...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通 ...

  4. Pandas的高级操作

    pandas数据处理 1. 删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True keep参数: ...

  5. 获取文本的编码类型(from logparse)

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  6. PROJ4初探(转并整理格式)

    PROJ4初探(转并整理格式) Proj4是一个免费的GIS工具,软件还称不上. 它专注于地图投影的表达,以及转换.采用一种非常简单明了的投影表达--PROJ4,比其它的投影定义简单,但很明显.很容易 ...

  7. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  8. 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. ...

  9. google(转帖)

    本帖最后由 qiushui_007 于 2014-6-10 16:14 编辑 IP Addresses of Google Global Cachewww.kookle.co.nr Bulgaria  ...

随机推荐

  1. MySQL常用数据类型 length 专题

    MySQL-data_type数据类型 1.查看数据类型 mysql> help data type    //通过help对数据进行查看,以及使用的方法 2.MySQL常见的数据类型 整数in ...

  2. LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)

    什么神仙思路啊-- 看到棋盘就去想二分图.(smg啊)(其实是校内模拟赛有基本一样的题,只不过直接给了个二分图) 看到二分图就去想最大匹配.(我怎么想偶环的性质去了) (以下内容摘自这里) 这个二分图 ...

  3. Python ASCII码与字符相互转换

    ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和 ...

  4. SLB外部端口非80时---》转发到nginx---》URL跳转丢失端口的解决方案

    配置nginx反向代理时遇到一个问题,当设置nginx监听80端口时转发请求没有问题.但一旦设置为监听其他端口,就一直跳转不正常: 如,访问欢迎页面时应该是重定向到登录页面,在这个重定向的过程中端口丢 ...

  5. UTF-8和BOM的一些说明

    BOM的含义 BOM即Byte Order Mark字节序标记.BOM是为UTF-16和UTF-32准备的,用户标记字节序(byte order).拿UTF-16来举例,其是以两个字节为编码单元,在解 ...

  6. .NET MVC5简介(五)管道处理模型IHttpModule

    https://www.cnblogs.com/JimmyZhang/archive/2007/09/04/880967.html IHttpModule HTTPRuntime(运行时).在一个控制 ...

  7. vsto 以隐藏的方式打开一个excel 文件 并获得excel文件的缩略图

    public byte[] GetExcelPictureFile(string filepath) { Workbook workbook=null; Microsoft.Office.Intero ...

  8. LooseVersion()使用及.__version__版本号的获取

    我简单看了distutils库,但发现目前还用不到,感觉有些复杂.因此我简单复制了别人的介绍,如下: Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Python的 ...

  9. js 时分秒转化为秒

    var time = '00:02:10'; var hour = time.split(':')[0]; var min = time.split(':')[1]; var sec = time.s ...

  10. 区块链社交APP协议分析预告

    2017年,比特币的火热,直接导致了代币市场的繁荣: 2018年,作为信用体系的未来解决方案,区块链引发了互联网原住民的淘金热. 作为风口上的引流神器,区块链技术与社交网络结合起来,产生了一系列区块链 ...