zoukankan      html  css  js  c++  java
  • 九度 1369 字符串的排列

    package com.wangzhu.njupt;
    
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.StreamTokenizer;
    import java.util.Arrays;
    
    /**
     * 还有重复的字符数组的全排列
     * 
     * @ClassName: Main1369
     * @Description: TODO
     * @author 王竹
     * @date 2014-10-5 下午3:04:55
     * 
     */
    public class Main1369 {
    
        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
            //System.setIn(new FileInputStream("data.in"));
            StreamTokenizer in = new StreamTokenizer(new BufferedInputStream(
                    System.in));
            while (in.nextToken() != StreamTokenizer.TT_EOF) {
                String str = in.sval;
                char[] buf = str.toCharArray();
                Arrays.sort(buf);
                int len = buf.length;
                boolean[] flagArr = new boolean[len];
                Arrays.fill(flagArr, true);
                char[] res = new char[len];
                dfs(0, len, buf, res, flagArr);
            }
        }
    
        /**
         * 输入:<br/>
         * abc<br/>
         * BCA<br/>
         * 输出:<br/>
         * abc<br/>
         * acb<br/>
         * bac<br/>
         * bca<br/>
         * cab<br/>
         * cba<br/>
         * ABC<br/>
         * ACB<br/>
         * BAC<br/>
         * BCA<br/>
         * CAB<br/>
         * CBA<br/>
         */
        /**
         * 
         * @param dep
         * @param maxDep
         * @param buf
         * @param res
         * @param flagArr
         */
        private static void dfs(int dep, int maxDep, char[] buf, char[] res,
                boolean[] flagArr) {
            if (dep == maxDep) {
                System.out.println(new String(res));
                return;
            }
            for (int i = 0; i < maxDep; i++) {
                if (!flagArr[i]
                        && (i != 0 && buf[i] == buf[i - 1] && flagArr[i - 1])) {
                    // 当有重复的时候
                    continue;
                }
                flagArr[i] = false;
                res[dep] = buf[i];
                dfs(dep + 1, maxDep, buf, res, flagArr);
                flagArr[i] = true;
            }
        }
    }
  • 相关阅读:
    PHP基础1
    U2-Net网络学习笔记(记录)
    C++贪吃蛇游戏
    实习期间学习基础学习整理
    week 2020.1.10-2020.1.15
    week 2021.1.04-2021.1.08
    week 2020.12.21-2020.12.31
    周记 week 2020-12.14-12.18
    几种读取图片和标签的方法
    图像风格转换(Style Transfer | 风格迁移综述)
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/4007174.html
Copyright © 2011-2022 走看看