[LeetCode]Permutations,解题报告

原创 2013年12月06日 10:38:02

前言

今天用java写了LeetCode oj上关于全排列的代码,这个算法之前我用c代码详细的讲解过,想看原理的移步:字符串全排列算法

感觉java的集合是神器,而且全排列算法在找工作笔试和面试中经常会出现,所以把java实现的代码也分享以下


题目

Given a collection of numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].


AC代码

这道题目没有对子ArrayList的顺序有要求

public class Solution {
    public static ArrayList<ArrayList<Integer>> permute(int[] num) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

        if (num.length == 0) {
            return list;
        }

        permutationProcess(num, 0, num.length - 1, list);

        return list;
    }

    public static boolean shouldSwap(int[] num, int bt, int k) {
        boolean flag = true;

        for (int i = bt; i < k; i++) {
            if (num[i] == num[k]) {
                flag = false;
                break;
            }
        }

        return flag;
    }

    public static void swapArray(int[] num, int a, int b) {
        if (a != b) {
            num[a] = num[a] ^ num[b];
            num[b] = num[a] ^ num[b];
            num[a] = num[a] ^ num[b];
        }
    }

    public static void permutationProcess(int[] num, int bt, int ed,
            ArrayList<ArrayList<Integer>> list) {
        if (bt == ed) {
            ArrayList<Integer> newlist = new ArrayList<Integer>(num.length);
            for (int val : num) {
                newlist.add(Integer.valueOf(val));
            }
            list.add(newlist);
        } else {
            for (int k = bt; k <= ed; k++) {
                if (shouldSwap(num, bt, k)) {
                    swapArray(num, bt, k);
                    permutationProcess(num, bt + 1, ed, list);
                    swapArray(num, bt, k);
                }
            }
        }
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LeetCode 46. Permutations 解题报告

LeetCode 46. Permutations 解题报告

Leetcode # 46. Permutations 全排列 解题报告

1 解题思想这道题是全排列,做法很多,而且Leetcode上随后也会有更多的变种这道题的假设是:distinct ,不重复,所以是最简单的一个,问题解法有两种: 1、设立一个状态数组,标示是否选择了...
  • MebiuW
  • MebiuW
  • 2016年04月17日 23:49
  • 567

Leetcode #47. Permutations II 全排列2 解题报告

1 解题思想这道题,就是第二个去全排列了,我昨天也预告过了,没看过的先看下上一题的解法: Leetcode # 46. Permutations 全排列 解题报告这道题有什么不一样的么?上一道题的...
  • MebiuW
  • MebiuW
  • 2016年04月18日 23:39
  • 348

【LeetCode】Permutations II 解题报告

【题目】 Given a collection of numbers that might contain duplicates, return all possible unique permu...
  • ljiabin
  • ljiabin
  • 2014年12月17日 11:26
  • 1320

Leetcode 473. Matchsticks to Square 卖火柴的小女孩画框框 解题报告

1 解题思想这道题的意思就是卖火柴的小女孩有一堆长度不等的火柴,他希望拼成一个正方形,不知道可以不可以?所谓可以就是: 1、用了所有火柴,一根不多,一根不少,当然一根用一次 2、四条边长度一样所以...
  • MebiuW
  • MebiuW
  • 2016年12月19日 19:27
  • 2885

【LeetCode】01 Matrix 解题报告

【LeetCode】01 Matrix 解题报告标签(空格分隔): LeetCode题目地址:https://leetcode.com/problems/01-matrix/#/description...

Leetcode #61. Rotate List 循环位移链表 解题报告

1 解题思想题目的意思是如果有一个链表,现在让你循环向右位移K步,得到一个新的开头的链表,例子可以看原题的实例。首先有一个你要明白的是,向右移动的K步,可能会大于链表的长度N,于是乎你需要这么做:1、...
  • MebiuW
  • MebiuW
  • 2016年05月01日 23:32
  • 1170

【LeetCode】Min Stack 解题报告

【题目】 Design a stack that supports push, pop, top, and retrieving the minimum element in constant t...
  • ljiabin
  • ljiabin
  • 2014年11月10日 16:17
  • 17586

leetCode解题报告5道题(三)

5道题目分别是:【Binary Tree Zigzag Level Order Traversal】、【Convert Sorted Array to Binary Search Tree和Conve...

【LeetCode】Majority Element 解题报告

Majority Element[LeetCode]https://leetcode.com/problems/majority-element/Total Accepted: 110538 Tota...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode]Permutations,解题报告
举报原因:
原因补充:

(最多只允许输入30个字)