面试总结--递归
2010-09-25 21:58
169 查看
/** *输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻 */ public class Test12345 { private int[] numbers = new int[] { 1, 2, 2, 3, 4, 5 }; public int n; private String lastResult = ""; private boolean validate(String s) { /* * 在validate中使用了 if (s.compareTo(lastResult) <= * 0)进行判断,由于按这种方法进行排列,如果这6个数是递增给出的 * ,那么排列的结果一定是递增的,但上述的6个数其中第2和第3个位置上都是2,因此 * ,如果出现了上一个结果不小于当前结果的情况,一定是有重复了,因此,要将这部分数过滤出去。 */ if (s.compareTo(lastResult) <= 0) return false; if (s.charAt(2) == '4') return false; if (s.indexOf("35") >= 0 || s.indexOf("53") >= 0) return false; return true; } public void list(String index, String result) { /** * index参数表示已经选择过的数,用numbers数组的索引表示。如index="012", * 表示numbers的前三个数已经被选择,也表示应该选择第四个数了, * 而这第四个数应该从后三个数中选择。result参数表示临时的数字组合(这个数字组合最多是5个数字, * 因为,如果到了6个数字,就表示已经有一个结果产生了) */ for (int i = 0; i < numbers.length; i++) { if (index.indexOf(i + 48) < 0) {// i+48 ,当i=0时,正好是数字1的ASCII String s = result + String.valueOf(numbers[i]); if (s.length() == numbers.length) { if (validate(s)) { System.out.println(s); lastResult = s; n++; } break; } list(index + String.valueOf(i), s); } } } public static void main(String[] args) { Test12345 t = new Test12345(); t.list("", ""); System.out.println("总数:" + t.n); }
/** * 一只猴子第一天摘下若干个桃子,当即吃了一半,不过瘾,又多吃了一个。第二天又将剩下的桃子吃了一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个。 * 第10天再想吃时,发现只剩下一个桃子。请问第一天猴子共摘了多少桃子? * * @author zengjie * */ public class DiGui { public static void main(String args[]) { int peach = totalPeach(1); System.out.println(peach); } public static int totalPeach(int day) { if (day == 10) { return 1; } return 2 * (totalPeach(day + 1) + 1); }
/** * 递归目录下的所有目录和文件名 */ public class TestFile { public static void listAllDir(String path) { File file = new File(path); if (file.isDirectory()) { System.out.println(path); String[] subPaths = file.list(); for (String s : subPaths) { listAllDir(path + "/" + s); } } else { System.out.println("" + path); } } public static void main(String[] args) { listAllDir("C:/签名工具"); } }
相关文章推荐
- 程序员面试题目总结--数组(一)【递归求数组所有元素和、用一个for循环打印出一个二维数组、用递归判断数组是否是递增、有序数组中删除重复元素】
- 面试总结之 递归
- 面试总结--递归2
- Servlet线程安全的问题----总结(应付以后的面试)
- 面试总结(static、const、define)
- 2017年6月北京面试经验总结
- 点招面试总结
- spring基础知识汇总及常见面试题目总结
- 测试开发面试的Linux面试题总结之二:常用命令
- 面试总结(一)
- 面试题目总结2
- 前端JS面试中常见的算法问题总结
- 面试总结贴
- 机器学习面试常见题总结(持续更新)
- 个人面试总结(共勉)
- iOS 面试总结
- PHP技术人员--面试总结PHP篇
- "BroadcastReceiver"-安卓面试必问技能点大总结"
- C语言链表在笔试面试中常考问题总结
- 阿里巴巴面试总结