黑马程序员技术交流社区

标题: 面试题之一不知道答案对不对,跪求更好的解答。 [打印本页]

作者: 罗勇    时间: 2016-5-14 18:25
标题: 面试题之一不知道答案对不对,跪求更好的解答。
题目:写一个方法输出所有的1234四个数的排序组合
         要求:13不能在一起且不能以4开头



作者: yaolv7    时间: 2016-5-14 20:18
要是换成 abcd  , 还能这样做么?{:2_40:}
作者: itlf    时间: 2016-5-14 22:00
我来膜拜大神
作者: lizejun111    时间: 2016-5-14 22:06
加入用HashSet不知道怎么样?set是无序的不重复的。不知道遍历许多次会不会出现重复的。
作者: pal_xie    时间: 2016-5-14 22:25
本帖最后由 pal_xie 于 2016-5-14 22:26 编辑
  1. public static void main(String[] args) {
  2.                 for (int a = 1; a < 4; a++) {
  3.                         for (int b = 1; b < 5; b++) {
  4.                                 for (int c = 1; c < 5; c++) {
  5.                                         for (int d = 1; d < 5; d++) {
  6.                                                 String s = "" + a + b + c + d;
  7.                                                 if (s.contains("13") || s.contains("31")) {
  8.                                                         continue;
  9.                                                 } else {
  10.                                                         System.out.println(s);
  11.                                                 }
  12.                                                 
  13.                                         }
  14.                                 }
  15.                         }
  16.                 }
  17.         }
复制代码
想到思路,2分钟就敲出来了
作者: 罗勇    时间: 2016-5-15 21:25
pal_xie 发表于 2016-5-14 22:25
想到思路,2分钟就敲出来了

你的结果有重复的奥

QQ截图20160515212446.png (8.05 KB, 下载次数: 4)

QQ截图20160515212446.png

作者: 罗勇    时间: 2016-5-15 21:28
lizejun111 发表于 2016-5-14 22:06
加入用HashSet不知道怎么样?set是无序的不重复的。不知道遍历许多次会不会出现重复的。 ...

这个我也不清楚奥,大神给实验下呗
作者: pal_xie    时间: 2016-5-15 22:06
罗勇 发表于 2016-5-15 21:25
你的结果有重复的奥

是一个数只能用一次是吗   我还以为只是不能相邻
那在里里面在加个判断就好   a ==b || a==c || a==d||b==c||b==d||c==d
貌似太长了
作者: pal_xie    时间: 2016-5-15 22:14
罗勇 发表于 2016-5-15 21:28
这个我也不清楚奥,大神给实验下呗

加set这个也可以   不过和加几个相等的判断代码数也差不多
  1. for (int a = 1; a < 4; a++) {
  2.                         for (int b = 1; b < 5; b++) {
  3.                                 for (int c = 1; c < 5; c++) {
  4.                                         for (int d = 1; d < 5; d++) {
  5.                                                 String s = "" + a + b + c + d;
  6.                                                 HashSet<Integer> hs = new HashSet<Integer>();
  7.                                                 hs.add(a);
  8.                                                 hs.add(b);
  9.                                                 hs.add(c);
  10.                                                 hs.add(d);
  11.                                                 if (s.contains("13") || s.contains("31") || hs.size() != 4) {
  12.                                                         continue;
  13.                                                 } else {
  14.                                                         System.out.println(s);
  15.                                                 }
  16.                                                
  17.                                         }
  18.                                 }
  19.                         }
  20.                 }
复制代码

作者: 罗勇    时间: 2016-5-15 22:42
pal_xie 发表于 2016-5-15 22:14
加set这个也可以   不过和加几个相等的判断代码数也差不多

嗯嗯,大神你马上就25技术分了啊,告诉我怎么加技术分啊,好难啊
作者: pal_xie    时间: 2016-5-15 23:01
罗勇 发表于 2016-5-15 22:42
嗯嗯,大神你马上就25技术分了啊,告诉我怎么加技术分啊,好难啊

还有一个  新手入学攻略里   有回帖奖励的全部回了,每天发帖回帖要注意质量,不要太水了
作者: 罗勇    时间: 2016-5-15 23:03
pal_xie 发表于 2016-5-15 23:01
还有一个  新手入学攻略里   有回帖奖励的全部回了,每天发帖回帖要注意质量,不要太水了 ...

懂了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2