【剑指offer】-字符串的排列-26/67

简介: 【剑指offer】-字符串的排列-26/67

1. 题目描述

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

2. 输入描述

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

3. 题目分析

  1. 经典的一道全排列算法的题目
  2. 全排列算法
  3. 这里以A{a,b,c}为例,来说明全排列的生成方法,对于这个集合,其包含3个元素,所有的排列情况有3!=6种,对于每一种排列,其第一个元素有3种选择a,b,c,对于第一个元素为a的排列,其第二个元素有2种选择b,c;第一个元素为b的排列,第二个元素也有2种选择a,c,……,依次类推,我们可以将集合的全排列与一棵多叉树对应。如下图所示

4. 题目代码

public ArrayList<String> Permutation(String str) {
    ArrayList<String> strings = new ArrayList<String>();
    if (str == null || str.length() == 0) {
      return strings;
    }
    char[] string = str.toCharArray();
    perm(strings, string, 0, string.length - 1);
    Collections.sort(strings);
    return strings;
  }
  public static void perm(ArrayList<String> strings, char[] a, int k, int m ) {
    if (k == m) {
      String str = String.valueOf(a);
      if (strings.contains(str) == false) {
        strings.add(str);
      }
    } else {
      /*
       * 进入时 
       */
      for (int i = k; i <= m; i++) {
        swap(a, i, k);
        perm(strings, a, k + 1, m);
        // 回溯
        swap(a, i, k);
      }
    }
  }
  public static void swap(char[] a, int x1, int x2) {
    char temp;
    temp = a[x1];
    a[x1] = a[x2];
    a[x2] = temp;
  }


相关文章
|
Android开发
教你在Android手机上使用全局代理!
前言:在Android上使用系统自带的代理,限制灰常大,仅支持系统自带的浏览器。这样像QQ、飞信、微博等这些单独的App都不能使用系统的代理。如何让所有软件都能正常代理呢?ProxyDroid这个软件能帮你解决!使用方法及步骤如下: 一、推荐从Google Play下载ProxyDroid,目前最新版本是v2.6.6。
17514 0
|
JSON 前端开发 开发工具
初探在WSL中设置vim前端开发环境
初探在WSL中设置vim前端开发环境
|
人工智能 供应链 监控
人力资源数智化正当时,何以引领企业跨越人才管理新高度?
人力资源数智化正当时,何以引领企业跨越人才管理新高度?
1006 0
人力资源数智化正当时,何以引领企业跨越人才管理新高度?
|
机器学习/深度学习 存储 人工智能
转载:【AI系统】计算之比特位宽
本文详细介绍了深度学习中模型量化操作及其重要性,重点探讨了比特位宽的概念,包括整数和浮点数的表示方法。文章还分析了不同数据类型(如FP32、FP16、BF16、FP8等)在AI模型中的应用,特别是FP8数据类型在提升计算性能和降低内存占用方面的优势。最后,文章讨论了降低比特位宽对AI芯片性能的影响,强调了在不同应用场景中选择合适数据类型的重要性。
转载:【AI系统】计算之比特位宽
|
存储 弹性计算 供应链
墨西哥节点,开服!
墨西哥节点,开服!
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
586 4
|
安全 算法 编译器
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
【10月更文挑战第30天】在.NET 9 中,AOT(Ahead-of-Time)编译技术在支持老旧的 Windows 7 和 XP 系统方面取得了显著进展。主要突破包括:性能提升(启动速度加快、执行效率提高)、部署优化(无需安装.NET 运行时、减小应用程序体积)、兼容性保障(编译策略优化、依赖项管理改进)以及安全性增强(代码保护机制)。这些改进使得应用程序在老旧系统上运行更加流畅、高效和安全。
639 2
|
数据采集 自然语言处理 文字识别
淘宝视频内容标签的结构化分析和管理
淘宝视频是如何分类的?又是如何保持不同类别视频样本得到相对均衡?又是如何应用的?
淘宝视频内容标签的结构化分析和管理
|
存储 关系型数据库 MySQL
MySQL 为什么使用 B+ 树作为索引结构?
MySQL 为什么使用 B+ 树作为索引结构?
594 2
|
XML Java Maven
log4j 日志的简单使用
这篇文章介绍了Log4j日志框架的基本使用方法,包括在Maven项目中添加依赖、配置`log4j.properties`文件以及在代码中创建和使用Logger对象进行日志记录,但实际打印结果中日志级别没有颜色显示。
log4j 日志的简单使用

热门文章

最新文章