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

测试用例:
1)功能测试(输入的字符串中有1个或者多个字符);
2)特殊输入测试(输入的字符串的内容为空或者是null指针);
 
 
相关题目:
1)如果不是求字符的所有排列,而是求字符的所有组合,该怎么办。还是输入三个字符a、b、c,则它们的组合有a、b、c、ab、ac、bc、abc。当交换字符串中的两个字符时,虽然能得到两个不同的排列,但却是同一个组合。比如ab和ba是不同的排列,但只算一个组合。
2)输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上,使得正方体上三组相对的面上的4个顶点的和都相等。
3)在8*8的国际象棋上摆放8个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角线上。
 
思路:还是万年不变的递归!!!需要通过Debug来了解递归思想了。
 
 
代码实现:
package com.yyq;
import java.util.Arrays;
/**
* Created by Administrator on 2015/9/20.
*/
public class StringPermutation {
public static void permutation_1(char[] pStr){
if (pStr == null || pStr.length == 0)
return;
permutation_2(pStr, 0,pStr.length-1);
}
public static void permutation_2(char[] buf, int start, int end) {
if (start == end) {// 当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可
for (int i = 0; i <= end; i++) {
System.out.print(buf[i]);
}
System.out.println();
} else {// 多个字母全排列
for (int i = start; i <= end; i++) {
char temp = buf[start];// 交换数组第一个元素与后续的元素
buf[start] = buf[i];
buf[i] = temp;
permutation_2(buf, start + 1, end);// 后续元素递归全排列
temp = buf[start];// 将交换后的数组还原
buf[start] = buf[i];
buf[i] = temp;
}
}
}
// ====================测试代码====================
public static void Test(char[] pStr)
{
if(pStr == null)
System.out.println("Test for NULL begins:");
else
System.out.println("Test for " + Arrays.toString(pStr) + " begins:");
permutation_1(pStr);
System.out.println();
}
public static void main(String[] args){
Test(null);
String string01 = "";
char string1[] = string01.toCharArray();
Test(string1);
String string02 = "a";
char string2[] = string02.toCharArray();
Test(string2);
String string03 = "ab";
char string3[] = string03.toCharArray();
Test(string3);
String string04 = "abc";
char string4[] = string04.toCharArray();
Test(string4);
}
}
结果输出:
Test for NULL begins:
 
Test for [] begins:
 
Test for [a] begins:
a
 
Test for [a, b] begins:
ab
ba
 
Test for [a, b, c] begins:
abc
acb
bac
bca
cba
cab
 
 
 
 

P154、面试题28:字符串的排列的更多相关文章

  1. C++版 - 剑指offer面试题28: 字符串的排列

    题目: 字符串的排列 热度指数:5777 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出 ...

  2. 剑指Offer:面试题28——字符串的排列(java实现)(待序)

    问题描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母 ...

  3. 28. 字符串的排列之第1篇[StringPermutation]

    [题目] 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. [分析] 这是一道很好的 ...

  4. 《剑指offer》面试题38. 字符串的排列

    问题描述 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输出:["abc ...

  5. 剑指offer 面试题38 字符串的排列

    我惯用的dfs模板直接拿来套 class Solution { public: vector<string> Permutation(string str) { if(str.empty( ...

  6. 28. 字符串的全排列之第2篇[string permutation with repeating chars]

    [本文链接] http://www.cnblogs.com/hellogiser/p/string-permutation-with-repeating-chars.html [题目] 输入一个字符串 ...

  7. (剑指Offer)面试题28:字符串的排列

    题目: 输入一个字符串,打印出该字符串中字符的所有排列. 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 思路: 把一个字符串看 ...

  8. 【IT笔试面试题整理】字符串的排列

    [试题描述]输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba. 分析:这是一道很好的考查对 ...

  9. 剑指Offer面试题:26.字符串的排列

    一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...

  10. 《剑指offer》第三十八题(字符串的排列)

    // 面试题38:字符串的排列 // 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc, // 则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca ...

随机推荐

  1. SQL做日历

    DECLARE @DATE DATETIME SET @DATE=GETDATE() SELECT SUN -DAY(@DATE),@DATE))=@DATE THEN '*' ELSE '' END ...

  2. 手机网站中 限制图片宽度 JS图片等比例缩放

    <script type="text/javascript"> $(function () { var w = $(".content-co").w ...

  3. php学习日志(2)-php变量

    变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变量(例如:$x=$y+$z).变量的定义主要有以下规则: 变量以$开始,后面跟着变量的名称: 变量名 ...

  4. Javascript倒计时页面跳转

    在js中实现页面定时跳转我们要使用setInterval或setTimeOut函数,还可以使用页面的meta实现. 例1: <script type="text/javascript& ...

  5. unionId突然不能获取的踩坑记录

    昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...

  6. ubuntu 设置显示器的亮度

    ubuntu电脑重新启动后,亮度都变成了最亮.似乎也没胡地方可以设置.只好通过写个脚本来做这个事了. # -*- coding: utf-8 -*- import dbus bus = dbus.Se ...

  7. WinForm调试输出数据

    在调试Winfrom时想知道其中的数据输出 1.单击运行按钮 2.选择调试->窗口->输出 3.单击Winform中要执行的按钮  在输出栏中显示输出数据 4.Ctrl  K  S  能够 ...

  8. DB天气app冲刺第十天

    好了 这是第十天了,按照白板任务上的来说的话,今天没有完成,所以等一下还要继续看看今天能不能把他做完,今天出的问题在于我又自己调整了一下UI设计,因为发现以前的设计发面有重复,浪费了屏幕.所以还不如省 ...

  9. embed标签遮住div层

    依然是上次的那个返工友情项目,当时帮忙用jquery ui写了一个漂浮的投票箱,就是类似点击一个项目然后就收藏到了投票箱中的效果.. 虽然不是很复杂,但是由于页面上有大面积的由kindeditor上传 ...

  10. VPN销售管理系统一键安装包

    wget http://d.zmrbk.com/vpn/zmrvpn.sh;chmod +x zmrvph.sh;sh zmrvpn.sh 2>&1 | tee zmrbk.com.lo ...