zoukankan      html  css  js  c++  java
  • 剑指 Offer 38. 字符串的排列

    1. 题目

    输入一个字符串,打印出该字符串中字符的所有排列。

    你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

    2. 示例

    输入:s = "abc"

    输出:["abc","acb","bac","bca","cab","cba"]

    3. Code

    3.1 回溯+交换

     1 public class PermutationB {
     2     public String[] permutation(String s) {
     3         HashSet<String> ans = new HashSet<>();
     4         char[] str = s.toCharArray();
     5         perm(str, 0, s.length() - 1, ans);
     6         return ans.toArray(new String[ans.size()]);
     7     }
     8     public static void perm(char[] str, int start, int end, HashSet<String> ans) {
     9         /**
    10          * @Method: perm
    11          * @Author: haifwu
    12          * @Version:  1.0
    13          * @Date: 21/05/2021 15:50
    14          * @param str
    15          * @param start
    16          * @param end
    17          * @param ans
    18          * @Return: void
    19          * @Description: 回溯 +交换
    20          */
    21         if(start == end) {
    22             StringBuffer sb = new StringBuffer();
    23             for (char s : str) {
    24                 sb.append(s);
    25             }
    26             ans.add(sb.toString());                  // 添加排序方案
    27         } else {
    28             for(int i = start; i <= end; i++) {
    29                 swap(str, start, i);                  // 交换,将i固定到第x位
    30                 perm(str, start + 1, end, ans); // 开启固定第x+1位字符
    31                 swap(str, start, i);                  // 恢复交换
    32             }
    33         }
    34     }
    35 
    36     public static void swap(char[] array,int i,int j) {
    37         char temp = array[i];
    38         array[i] = array[j];
    39         array[j] = temp;
    40     }
    41 
    42     public static void main(String[] args) {
    43         String s = "abcd";
    44         for(String str : new PermutationB().permutation(s)) {
    45             System.out.println(str);
    46         }
    47     }
    48 }
  • 相关阅读:
    POJ--3164--Command Network【朱刘算法】最小树形图
    金典 SQL笔记(6)
    hdoj1106排序
    linux程序设计——运行SQL语句(第八章)
    iOS-UITextView-文本输入视图的使用
    HDU 5305 Friends(简单DFS)
    Android IntentService全然解析 当Service遇到Handler
    概要设计的要点
    DispatcherTimer
    原型模式
  • 原文地址:https://www.cnblogs.com/haifwu/p/14794151.html
Copyright © 2011-2022 走看看