美文网首页
全排列 n皇后

全排列 n皇后

作者: 啦啦哇哈哈 | 来源:发表于2018-10-29 21:08 被阅读0次

输入一个字符串打印出这个字符串的全排列,剑指上面是字符串没有重复字母的,牛客上面输入有重复字母,要求搞掉重复的排列,还有顺序要求....嗯,其实区别不是很大,就按牛客上的来写。
Permutation递归产生所有前缀是charArray[0,begin-1],后缀是charArray[begin,length-1]的全排列的所有排列。

public class Solution {
    ArrayList<String> ans = new ArrayList<>();
    public ArrayList<String> Permutation(String str) {
        if(str == null || str.length() == 0){
            return ans;
        }
        
        Permutation(str.toCharArray(),0);
        Collections.sort(ans);
        return ans;
    }
    
    private void swap(char[] charArray, int i, int j){
        char tmp = charArray[i];
        charArray[i] = charArray[j];
        charArray[j] = tmp;
    }
    
    private void Permutation(char[] charArray, int begin){
        if(begin == charArray.length){
            String newString = new String(charArray);
            if(!ans.contains(newString))
                ans.add(newString);
            return ;
        }
        
        for(int i = begin; i < charArray.length; i ++){
            swap(charArray, i, begin);
            Permutation(charArray, begin + 1);
            swap(charArray, i, begin);//这块记得换回来 
        }
    }
}

当然contains和sort那两步,完全可以使用TreeSet来解决问题。最后返回用ArrayList的参数是Collection的那个构造函数。

全排列问题一个更有名的问题就是n皇后问题。n*n的格子里头,每个皇后必然在不同行,我们用一个ColumnIndex[n]数组,ColumnIndex[i]表示第i行皇后所在的列,那就对0 1 2 3 4 5 6 7 8.....n-1(行列标从0开始)进行全排列,对于全排列的每个排列,去检查有没有两两皇后在某个对角线上面,也就是检查ColumnIndex[i] - ColumnIndex[j] == i - j就可以了,也就是在递归终止条件那块写个方法,检查一下这个ColumnIndex数组就好了。

相关文章

  • 全排列 n皇后

    输入一个字符串打印出这个字符串的全排列,剑指上面是字符串没有重复字母的,牛客上面输入有重复字母,要求搞掉重复的排列...

  • 线性代数笔记 (一)

    预备知识 全排列和对换 全排列 把 n 个不同的元素排成一列, 叫做这 n 个元素的全排列 (简称排列) .n 个...

  • 输出数组的全排列

    思想: n 个元素数组全排列 = 第 1 个前缀 + 后 n - 1 个元素全排列 输出第 k 个元素之后的全排列...

  • 字符串全排列

    题目描述 对给定的n位字符串全排列 解题思路 n位的字符串的全排列,先确定第0位,然后对后面n-1位进行全排列,在...

  • 算法简记- 全排

    1、// 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 回溯 2、// n 皇后问题 研究的是如何将...

  • 子集、全排列、第k个排列

    子集输出 全排列输出 存在重复数字的全排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大...

  • iOS-数组的全排列

    百度百科链接 - 全排列 序言 数组的全排列可用于求解八皇后问题。与此同时,全排列经常会出现在笔试或者面试,如求字...

  • 46. Permutations

    Description 找到数组全排列 Solution 暴力dfs with sortTime O(N! *N ...

  • 37. Sudoku Solver

    这道题。。真是有点难。 首先,这题的套路我懂,是N皇后那种全排列DFS问题。有几个难以理解的点,第一,为什么这题的...

  • 全排列(递归算法)

    一. 全排列算法 首先:什么是全排列=》百度一下 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,...

网友评论

      本文标题:全排列 n皇后

      本文链接:https://www.haomeiwen.com/subject/wueitqtx.html