一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 382|回复: 4
收起左侧

[算法题] 算法题求解

[复制链接] |试试Instant~ |关注本帖
On_the_way 发表于 2014-10-22 12:04:16 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
来源于EPIC的OA,具体是列出Permutation(n,m)(n is not equal to m)的所有情况。在网上找了很长时间代码,找到了列出所有combination(n,m) 和 Permutation(n,n)的代码,没找到列Permutation(n,m)的,所以就把这两个组合起来先求combination再对每个combination用permutation。但想想这肯定不是最简单的解法,有大神知道怎么可以一部做出来吗?
caiqi8877 发表于 2014-10-24 04:00:11 | 显示全部楼层
好难,真的好难
回复 支持 反对

使用道具 举报

圆梦梦剧场 发表于 2014-10-24 04:22:24 | 显示全部楼层
本帖最后由 圆梦梦剧场 于 2014-10-24 04:25 编辑
  1. public class Permutations {
  2.     public ArrayList<ArrayList<Integer>> permute(int[] num, int m) {
  3.         ArrayList<ArrayList<Integer>> permutations = new ArrayList<ArrayList<Integer>>();
  4.         if (num != null && m <= num.length) {
  5.             dfs(num, permutations, new ArrayList<Integer>(), new boolean[num.length], m);
  6.         }
  7.         return permutations;
  8.     }


  9.     private void dfs(int[] num, ArrayList<ArrayList<Integer>> permutations, ArrayList<Integer> permutation, boolean[] used, int m) {
  10.         if (m == permutation.size()) {
  11.             permutations.add(new ArrayList<Integer>(permutation));
  12.             return;
  13.         }

  14.         for (int i = 0; i < used.length; ++i) {
  15.             if (!used[i]) {
  16.                 used[i] = true;
  17.                 permutation.add(num[i]);
  18.                 dfs(num, permutations, permutation, used, m);
  19.                 permutation.remove(permutation.size() - 1);
  20.                 used[i] = false;
  21.             }
  22.         }
  23.     }
  24. }
复制代码
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-9 02:11

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表