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. What is Market Intelligence and how is it Used?

    https://blog.globalwebindex.com/marketing/market-intelligence/ Market intelligence is the gathering ...

  2. 剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)

    题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...

  3. console调试技巧

    1.console.log() 我们经常会使用console.log来打印出某个变量的值或者某个实体对象,也可以传入多个变量参数,它会按照传入顺序进行打印: 1. 传入一个变量 const a = 1 ...

  4. 终结 finalize() 和对象引用

    一.finalize() 方法 1. 为什么要有 finalize() 方法? 假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由 new 分配的内存,所以他 ...

  5. Linux 学习记录五(软件的安装升级).

    一.gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接. gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行 ...

  6. Java连载52-单例模式的缺点以及抽象类

    一.单例模式 1.单例模式的缺点:单例模式的类型没有子类,无法被继承. 例如:下面的例子,由于父类的构造方法是私有的,所以子类中的构造方法是无法创建的,因为它是引用父类的构造方法 package co ...

  7. Android常用adb命令总结(二)

    adb shell 命令 简单点讲,adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Andr ...

  8. LeetCode 205:同构字符串 Isomorphic Strings

    题目: 给定两个字符串 s 和 *t*,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 *t* ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字 ...

  9. Jenkins登录后空白页

    进入.jenkins所在的目录 编辑config.xml文件 重启jenkins

  10. JQuery学习笔记(4)——ajax

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML) 原生 例子 点击按钮,访问服务器上的ajax_info.txt文件,获得txt ...