1.6打印字符串排列

public static void swapChar(char[] str ,int i,int j){
        char tmp = str[i];
        str[i] = str[j];
        str[j] = tmp;
    }
    public static void printString(char[] str,int low,int high){
        int i;
        char tmp;
        if(low == high){
            System.out.println(str);
        }else{
            for(i=low;i<high;i++ ){
                swapChar(str,low,i);
                printString(str,low+1,high);
                swapChar(str,low,i);
            }
        }
    }

对递归的理解,这里的字符串没有重复字符。

时间: 2024-10-10 13:57:32

1.6打印字符串排列的相关文章

字符串排列与八皇后问题

字符串排列问题 输入一个字符串,输出该字符串的所有排列.如输入abc,则输出abc,acb,bca,caab,cba.根据排列组合的知识,3个字符串的排列有3!=6个. 先考虑字符没有重复的情况: 可以将字符分成两个部分,第一部分为第一个字符,第二部分为后面的部分. 这样abc的排列情况可以这么分析: a+bc; b+ac; c+ab; 即将第一个字符一次与后面的每一个字符交换,然后分别求剩余部分的排列.这种思想将原来为n的问题变成了n-1的问题.用递归实现: 下面是<剑指offer上的代码>

一个字符串排列的小算法

给定n个A和2n个B,用这些字符拼成一个字符串,要求这个串的所有前缀和后缀B的个数始终不少于A. (一个字符串的前缀是只从开头到某个位置为止的子串,后缀是只从某个位置到结尾的子串). 输入格式 多组数据,每组数据只有一行,包含一个正整数n.(n<=10^17). 输出格式 每组数据输出一行,最终结果对99991取余数的结果. def count(n,m,ac,bc,sb):    if(ac==n or bc==m):        print sb;        return 1;    i

按照长度递减的方式打印 字符串 &quot;BackSpace&quot;

/** * 按照长度递减的方式打印 字符串 "BackSpace" * 打印格式如下: * BackSpace * BackSpac * ackSpace * BackSpa * ackSpac * ckSpace * ..... */ /** * 按照长度递减的方式打印 字符串 "BackSpace" * 打印格式如下: * BackSpace * BackSpac * ackSpace * BackSpa * ackSpac * ckSpace * .....

实现sprintf--浮点数打印字符串

亲爱的程序猿们,你们肯定都用过printf吧?你们知道,看起来理所当然的简单的printf,实际上是个难倒众多计算机科学家的难题吗?直到1971年,才有我们的毒师Mr.White科学家(Jon White)解决这个问题,直到1990年,我们的Mr.White才正式发表这算法的最终版本,Dragon4, 在随后到最近的几十年来,语言上的各种浮点数打印字符串都是用Dragon4算法,其他人的研究都只是对这个算法修修补补,直到Grisu算法的出现.Grisu算法由Florian Loitsch发表,6

描述了say_hello函数的具体内容,调用zend_printf系统函数在php中打印字符串

下载一个php的源代码包,这里使用的是php 4.0.5版,解压后会看到php的根目录下会有README.EXT_SKEL这样一个文件,打开详细阅读了一下,发现了一个非常好用的工具,这个工具可以帮你构建一个空的php扩展,然后你向里面添加相应的代码就可以完成你自己的功能扩展了.下面我们就来介绍如何使用这个工具. 首先转移你的目录到php的目录下的ext目录,如果你只需要一个基本的扩展框架的话,执行下面的命令: ./ext_skel --extname=module_name module_nam

字符串排列组合问题

一.全排列无重复字符 #include<stdio.h> #include<string.h> char buf[1024]; void func(int index); void swap(int index1,int index2); int main() { memset(buf,0,sizeof(buf)); sprintf(buf,"abc"); func(0); return 0; } void func(int index) { if(index

C++ 打印字符串的地址

1.如下代码 char c[5] = {'h', 'a', '\0'}; char *p = c; cout << c << endl; cout << p << endl; 输出结果为 haha 2.分析不论是指定字符串的名字还是指向字符串的指针,都输出的是字符串,这是由于cout 对字符数组做了处理.如果想要打印字符串的地址的话,使用如下代码 cout << static_cast<void*>(c) << endl;

用指针打印字符串长度(指针 &amp; fgets函数)

1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define MAX 1024 5 6 int main(){ 7 //用指针打印字符串长度 8 char str[MAX]; 9 char *target = str; 10 int length = 0; 11 12 printf("请输入一个字符串:"); 13 fgets(str, MAX, st

打印任意字符串排列组合

#include <iostream>#include <string> using namespace std; void swap(string& s,int i,int j){ char a = s[i]; s[i] = s[j]; s[j] = a;} void myPrint(string& s, size_t index){ if (index >= s.size()) { cout << s << endl; return