一个软件公司的面试题

quanshi7 2006-12-29 07:13:31
把一个数组里的数组合全部列出了 比如1 2 列出来为 1, 2 ,12,21,
尽量简洁.
...全文
886 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
醉马不肖 2006-12-31
  • 打赏
  • 举报
回复
后来仔细想了一下,
感觉自己说的不对,

如果不考虑的输出结果是否有重复的话,直接排列就可以了,

如果要求输出没有重复,就必须考虑重复的排列

shine333 2006-12-30
  • 打赏
  • 举报
回复
上面的程序,其实已经考虑重复的情况了,只是自己没发现。
For_suzhen 2006-12-30
  • 打赏
  • 举报
回复
说错了,确实应该是个排列
向2楼的致歉
For_suzhen 2006-12-30
  • 打赏
  • 举报
回复
应该是一个组合的问题
For_suzhen 2006-12-30
  • 打赏
  • 举报
回复
帮顶,全排列,可不是简单的循环。

利用递归函数进行数组的全排列。
算法思想:
每次确定一个元素作为排列的第一个元素,然后对剩下的元素进行全排列并与已确定元素构成整个数组的全排列。
============================================================================
虽然不是简单的循环,可也不是全排列阿
54powerman 2006-12-30
  • 打赏
  • 举报
回复
循环不好吧,数量不限的话,还是递归吧。
cooljelly 2006-12-30
  • 打赏
  • 举报
回复
我编译了下也报错,刚开始学java,想看看你们的代码
listAll.java:1: 'class' or 'interface' expected
public static void main(String[] args) throws Exception
^
1 error
chszs 2006-12-30
  • 打赏
  • 举报
回复
先判断数组的元素是否有重复(即相等)?
有重复->递归+组合
无重复->递归+排列

暂时先讨论无重复的情况,数组的元素看作是一个集合,假设为n个,则
1): 取一个元素的情况,有n种可能性;
2): 取两个元素的情况,则有n*(n-1)/2种可能性,而取得的两个数又可以进行全排列,所以共有2!*n*(n-1)/2=n*(n-1)种可能性;
......
n-1): 取n-1个元素的情况,有n种可能性,而取得的n-1个数又可以进行全排列,所以共有n*(n-1)!=n!;
n): 取n个元素的情况,有1种,一个全排列,共有n!种;

所有的可能性为从第1)步到第n)步的可能性之和。

编程用递归也不容易,数组元素如果有重复,那就要用到《组合数学》中的定理了。限于时间,不再赘述。
quanshi7 2006-12-30
  • 打赏
  • 举报
回复
这个其实不简单呀,主要是考一个思想
nicky_hk 2006-12-30
  • 打赏
  • 举报
回复
mark
quanshi7 2006-12-30
  • 打赏
  • 举报
回复
好了,朋友谢谢你呀,能不能加你的QQ呀?
shine333 2006-12-30
  • 打赏
  • 举报
回复
报什么错,编译错误还是运行错误
quanshi7 2006-12-30
  • 打赏
  • 举报
回复
shine333(enihs) 你的程序有我怎么一运行,就报错呀,
laiwusheng 2006-12-30
  • 打赏
  • 举报
回复
niu
antony0203 2006-12-30
  • 打赏
  • 举报
回复
这个考代码的话还是蛮简单的,shine333(enihs) 的回答我觉得挺详细的了,
考思想,那就不知道所以然了,进来学习学习
quanshi7 2006-12-30
  • 打赏
  • 举报
回复
shine333 谢谢你呀,能不能加你的QQ呀?
shine333 2006-12-30
  • 打赏
  • 举报
回复
排列

Pn(m)

首先去掉相同的数, ......

=================================

大家根本不需要考虑重复不重复这件事情,取的时候,就只有位置信息,而不管他们的数值是多少。最后出来的结果,必然是
1
12
123
1234
124
1243
13
......
只不过这里1,2的含义不是数值,而是位置信息
shine333 2006-12-30
  • 打赏
  • 举报
回复
回复人:cooljelly() ( ) 信誉:100 2006-12-30 12:26:56 得分:0


? 我编译了下也报错,刚开始学java,想看看你们的代码
listAll.java:1: 'class' or 'interface' expected
public static void main(String[] args) throws Exception
^
1 error

外面写个class
public class Test {
pubilc static void main .......
}
醉马不肖 2006-12-30
  • 打赏
  • 举报
回复
排列

Pn(m)

首先去掉相同的数,然后根据排列的公式算出所有的排列,去掉位数2位以上的数的各个位上的数字都在1位数的数字集合里都出现过,
最后就是剩下的数组为A,元素个数为N,最后在根据排列公式算出所有的可能!


Pn(1)=n!/(n-1)!
Pn(2)=n!/(n-2)!
Pn(3)=n!/(n-3)!
...
Pn(n)=n!/(n-n)! (n是数组中有多少个不同的数)
kaoloveting 2006-12-30
  • 打赏
  • 举报
回复
我也怕面试题目
加载更多回复(9)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧