zoukankan      html  css  js  c++  java
  • JZ027字符串的排列

    字符串的排列

    题目描述

    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

    题目链接: 字符串的排列

    代码

    import java.util.ArrayList;
    import java.util.Arrays;
    
    /**
     * 标题:字符串的排列
     * 题目描述
     * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,
     * 则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
     * 题目链接:
     * https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7?tpId=13&&tqId=11180&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
     */
    public class Jz27 {
      private ArrayList<String> ret = new ArrayList<>();
    
      public ArrayList<String> permutation(String str) {
        if (str.length() == 0) {
          return ret;
        }
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        backtracking(chars, new boolean[chars.length], new StringBuilder());
        return ret;
      }
    
      private void backtracking(char[] chars, boolean[] hasUsed, StringBuilder s) {
        if (s.length() == chars.length) {
          ret.add(s.toString());
          return;
        }
        for (int i = 0; i < chars.length; i++) {
          if (hasUsed[i]) {
            continue;
          }
          // 保证不重复
          if (i != 0 && chars[i] == chars[i - 1] && hasUsed[i - 1]) {
            continue;
          }
          hasUsed[i] = true;
          s.append(chars[i]);
          backtracking(chars, hasUsed, s);
          s.deleteCharAt(s.length() - 1);
          hasUsed[i] = false;
        }
      }
    
      public static void main(String[] args) {
        Jz27 jz27 = new Jz27();
        ArrayList<String> result = jz27.permutation("abcdee");
        System.out.println("size: " + result.size());
        for (int i = 0; i < result.size(); i++) {
          System.out.println(result.get(i));
        }
      }
    }
    

    【每日寄语】 执着的攀登者,不必去与别人比较自己的形象是否高大,重要的是要多多思考自己前进的脚步是否扎实。

  • 相关阅读:
    内部类的作用
    zookeeper(1)-概述
    @RequestBody、@ResponseBody注解是如何将输入输出转换成json的
    HashMap之红黑树
    HashMap深入理解
    SpringBoot的四种定时任务
    Redis基础
    Redis内存回收机制
    高频面试题
    36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/kaesar/p/15696094.html
Copyright © 2011-2022 走看看