zoukankan      html  css  js  c++  java
  • 面试题28:字符串的排列

    题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来

    的所有字符串abc、acb、bac、bca、cab和cba。

    参见LeetCode-Permutations

    本题扩展:

    如果不是求字符的所有排列,而是求字符的所有组合,应该怎么办?

    还是输入三个字符a、b、c,则它们的组合有a、b、c、ab、ac、bc、abc,当交换字符串中的两个字符时,虽然能得到两个不同的排列,但

    却是同一个组合。比如ab和ba是不同的排列,但只算一个组合。

    如果输入n个字符,则这n个字符能构成长度为1的组合,长度为2的组合、......、长度为n的组合。在求n个字符的长度为m(1<=m<=n)的组合的时候,我们

    把这个n个字符分成两部分:第一个字符和其余的所有字符。如果组合里包含第一个字符,则下一步在剩余的字符里选取m-1个字符,如果组合里不包含第一个字符,

    则下一步在剩余的n-1个字符里选取m个字符。也就是说,我们可以把求n个字符组成长度为m的组合的问题分解成两个子问题,分别求n-1个字符串中长度为m-1的

    组合,以及求n-1个字符的长度为m的组合。这两个子问题都可以用递归的方式解决。

  • 相关阅读:
    行政区划遮罩 -Leaflet
    WebGIS vs WebGL图形编程
    oracle 中 group by 加强
    Nagios监控服务搭建
    MySQL触发器使用详解
    mybatis--一对多关联
    mybatis--一对一关联查询
    mybatis--实现数据库增删改查
    mybatis--使用接口注解的方式实现Helloword
    mybatis--第一个mybatis程序
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4618857.html
Copyright © 2011-2022 走看看