一个简单的算法题
2010-05-31 17:09
309 查看
看了http://www.cnblogs.com/hya1109/archive/2008/02/18/1072671.html。感觉思路不对。
自己决定尝试一下。
原题:
该公司笔试题就1个,要求在10分钟内作完。
题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"
不能在第三位,"3"与"5"不能相连。
思路:
首先,我觉得就是用递归来解决全排列的问题。然后筛除不合条件的排列就可以了。
又用Scala实现了一遍,做个对比:
自己决定尝试一下。
原题:
该公司笔试题就1个,要求在10分钟内作完。
题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"
不能在第三位,"3"与"5"不能相连。
思路:
首先,我觉得就是用递归来解决全排列的问题。然后筛除不合条件的排列就可以了。
package algorithms; import java.util.ArrayList; public class Algorithms { public static void main(String[] args){ int[] ints = {1,2,2,3,4,5}; String str = ""; allList(str,ints); System.out.println("valid sequences============"); for(Object o : validList){ System.out.println(o); } System.out.println("invalid sequences============"); for(Object o : inValidList){ System.out.println(o); } } static ArrayList validList = new ArrayList(); static ArrayList inValidList = new ArrayList(); static void allList(String str,int[] ints){ for(int i = 0; i< ints.length; i++){ if (ints.length == 1){ String s = str + ints[i]; if (isValid(s)){ validList.add(s); }else { inValidList.add(s); } return; } allList(str + ints[i],getInts(i,ints)); } } static int[] getInts(int i, int[] ints){ int[] newarr = new int[ints.length - 1]; for(int j = 0,k=0; j < ints.length; j++){ if(j!=i)newarr[k++]=ints[j]; } return newarr; } static boolean isValid(String str){ if (str.contains("35") || str.contains("53") || str.indexOf("4") == 2){ return false; } return true; } }
又用Scala实现了一遍,做个对比:
package test import scala.collection.mutable.ListBuffer object HelloWorld { def main(args: Array[String]){ allList("",List(1,2,2,3,4,5)) list foreach println } var list: ListBuffer[String] = new ListBuffer[String] def allList(str: String, ints: List[Int]):Unit = ints match { case head::Nil => { def isValid(str:String) = !(str.contains("35")||str.contains("53")||str.indexOf("4")==2) val result = str+head if(isValid(result))list += result } case _ => for(i <- 0 to ints.size-1){ allList(str+ints(i),subList(i,ints)) } } def subList(i: Int, lst: List[Int]):List[Int] = { val sub = new ListBuffer[Int] for (j <- 0 to lst.size - 1){ if(j!=i)sub += lst(j) } sub.toList } }
相关文章推荐
- 一个简单的算法题9.4
- 一个简单的概率算法
- 【技术收藏】enpaodelvzi编写:一个Java写的俄罗斯方块源码 算法简单(300行) 注释详细
- 一个简单的波形包络提取算法
- 一个简单的多机器人编队算法实现--PID
- 一个简单的c#加密,签名,验签,解密算法.(2)
- 漫水填充算法的一个简单实现(Qt版)
- 一个简单的子集产生算法
- 一个简单算法的设计(一个数组中连续区间和的最大值)
- 一个基于Java的简单分组处理算法
- 一个简单的统计图像主颜色的算法(C#源代码)
- 一个简单的镜头稳定算法
- 一个简单的实现找出数组中一个数字出现次数最多的数字的算法
- Opnet 一个简单的网络实现Dijkstra最短路径算法,路径代价为跳数加排队延时
- 水下图像增强相关算法的一个简单小结。
- SSE图像算法优化系列十:简单的一个肤色检测算法的SSE优化。
- LOJ2254 && bzoj5016 [Snoi2017]一个简单的询问 莫队算法
- 一个简单的JavaScript 日期计算算法
- 一个计算简单数学表达式值的算法。
- 一个简单的多机器人编队算法实现--PID