剑指offer:求字符的所有组合

来源:互联网 发布:淘宝黑色半高领薄毛衣 编辑:程序博客网 时间:2024/05/24 05:24

题目:输入一串字符,求字符的所有排列,例如输入a、b、c,得到的组合是a bc ab ac bc abc

显然ab与ba是相同的。

下面的算法是利用回退的性质来求所有的组合的。

package com.interview;import java.util.Scanner;/* * 实现组合问题:中心思想,对于abcd,实现插入某一个位置的字符 *a  插入0位置字符 *ab 插入1位置字符 *abc 插入2位置字符 *abcd  插入3位置字符(此时已满,回退,这显然用的是栈,那么递归也是可以实现的) *abd *ac *acd *ad *b *bc *bcd *bd *c *cd *d */public class Combination {private void combine(String str) {char[] in = str.toCharArray();StringBuffer out = new StringBuffer();allCombine(in, out, 0);}private void allCombine(char[] in, StringBuffer out, int start) {for (int i = start; i < in.length; i++) {out.append(in[i]);System.out.println(out);if (i < in.length - 1)allCombine(in, out, i + 1);out.setLength(out.length() - 1);}}public static void main(String[] args) {// TODO Auto-generated method stubCombination cb = new Combination();Scanner sc = new Scanner(System.in);String str = sc.next();cb.combine(str);}}


0 0