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

    一、题目

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

    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

    二、解法

    基于回溯法:

     1 import java.util.ArrayList;
     2 import java.util.Collections;
     3 public class Solution {
     4     public ArrayList<String> Permutation(String str) {
     5         ArrayList<String> res = new ArrayList<String>();
     6            if(str != null && str.length() > 0){
     7                PermutationHelper(str.toCharArray(),0,res);
     8                Collections.sort(res);
     9            }
    10            return res;
    11     }
    12     //递归实现
    13     private static void PermutationHelper(char[] cs, int i, ArrayList<String> list) {
    14         if(i == cs.length-1){
    15             //解空间的一个叶子结点
    16             String val = String.valueOf(cs);
    17             if (!list.contains(val))
    18                 list.add(val);
    19         }else{
    20             for(int j = i; j < cs.length; ++j){
    21                 swap(cs,i,j);
    22                 PermutationHelper(cs, i+1, list);
    23                 swap(cs,i,j);
    24             }
    25         }
    26     }
    27      public static void swap(char[] cs, int i, int j) {
    28          char temp = cs[i];
    29          cs[i] = cs[j];
    30          cs[j] = temp;
    31      }
    32 }
  • 相关阅读:
    关于binary log那些事
    Ubuntu常用软件安装与使用
    Ubuntu 12.04系统优化清理
    Ubuntu 12.04开机自动挂载Windows分区
    wubi安装Ubuntu后扩充Ubuntu系统空间
    sudo找不到命令:修改sudo的PATH路径
    JS 获取触发事件的对象
    NOIP 2002
    NOIP 2011 聪明的质监员
    NOIP 2011 计算系数
  • 原文地址:https://www.cnblogs.com/fankongkong/p/7453102.html
Copyright © 2011-2022 走看看