问题:从一个int数组array中选出m个数。

限制:1. array中元素互不相同;2. m不大于array的长度n。

思路:C(n,m) = C(n-1,m) + C(n-1,m-1)。考虑元素array[0]和子数列array[1..n-1],如果array[0]出现在结果中,那么就从array[1..n-1]中选出m-1个,否则从array[1..n-1]中选出m个。

代码:一种组合对应一个HashSet<Integer>,所有组合的集合构成一个HashSet<HashSet<Integer>>。

 1    }

 讨论

1. 元素互异的限制可放宽,把HashSet换成别的,例如ArrayList。

2. int型的限制可放宽,搞个泛型吧,很cool。

3. 时间复杂度怎么算?一眼看不出来,改天再深究。

4. 对返回void且在方法体内调用println的做法比较反感,情愿用集合之集合来存储结果。

5. 对非递归算法无爱并敬而远之,始终认为那是牛们为了戏虐猪羊而写的。

相关文章:

  • 2022-01-14
  • 2022-12-23
  • 2021-10-08
  • 2021-07-04
猜你喜欢
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2021-12-06
  • 2022-12-23
  • 2021-12-22
  • 2022-02-23
相关资源
相似解决方案