递归程序最难写......

题目描述

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

代码如下,java依旧:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;

public class Solution {
    HashSet<String> arrangeSet = new HashSet<>();

	public void DfsStr(char str[],char sequence[],int step,int strLen,boolean moveFlag[])
	{
		if(step == strLen)
		{
			String arrange = new String(sequence);
			arrangeSet.add(arrange);
			return;
		}

		for(int i = 0; i < strLen; i++)
		{
			if(moveFlag[i] == false)
			{
				sequence[step] = str[i];
				moveFlag[i] = true;
				DfsStr(str, sequence, step + 1, strLen, moveFlag);
				moveFlag[i] = false; //回退一步
			}
		}

	}

	public ArrayList<String> Permutation(String str)
	{

	       char sequence[] = new char[str.length()];
	       boolean moveFlag[] = new boolean[str.length()];
	       char strArrary[] = str.toCharArray();
	       ArrayList<String> stringList = new ArrayList<>();

	       if(str == null || str.isEmpty())
	       {
	    	   return stringList;
	       }

	       for(int i = 0; i < str.length(); i++)
	       {
	    	   moveFlag[i] = false;
	       }

	       DfsStr(strArrary, sequence, 0, str.length(), moveFlag);

	       stringList.addAll(arrangeSet);
	       Collections.sort(stringList);

	       return stringList;
    }
}

  

时间: 2024-10-13 23:10:04

递归程序最难写......的相关文章

怎样写出一个递归程序

作为小白,我看到递归程序只是能看懂,但是自己写不出来,我知道要有一个临界条件(这个并不难找),但我不知道怎么演进,这让我十分头疼,因此找到了一篇个人认为写的不错的文章如下,根据我对递归的理解和疑问对原文做了一些标注,欢迎各位大佬,写下自己对递归的理解,本小白感激不尽. 如何写一个递归程序 总是听到大大们说递归递归的,自己写程序的时候却用不到递归.其中的原因,一个是害怕写递归,另一个就是不知道什么时候用递归.这篇文章就浅析一下,希望看完之后不再害怕递归,这就是本文最大的目的. 递归到底有什么意义?

高质量的工程代码为什么难写 (转)

http://kb.cnblogs.com/page/558087/ 之所以想起写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定要慎重,通常会有N多的坑等着你去填,而比较成功的开源项目的背后多数都会有商业公司在背后不断的改进. 遥想我2000年开始学习写asp代码时,觉得写代码也不难呀,无非就是学学语法规则.库就可以写出来,记得有一次我实习面试的时候是让我

如何不被程序员嫌弃——写给那些血气方刚的产品经理

进入微软.亚马逊,谷歌等美国IT企业工作人才项目,起薪40万,百度搜索(MUMCS) 最近有位刚做 PM(产品经理)的小伙跑来跟我控诉,说公司技术部的 RD 们(程序员)个个不给力.需求过了千百遍还是理解错,或者就是简单回一句"做不了",表情如死灰. 这位 PM 血气方刚,张牙舞抓,脑子里总有一千万个新产品需求的想法扑腾着.他咄咄不停的抱怨 RD 们不配合,能力差,懒惰,没思考能力,没品位,顺带连抠脚味儿太大这种事也强烈谴责了."擦,老子明天就去学编程!" 哎,我发

从 Word 到 Docbook, 最后用 Pandoc, 让程序员爱上写文档

写文档一直是程序员非常讨厌的工作, 甚至和改需求一样令人厌烦. 在程序员眼里比写程序还难, 即便强制执行下来文档质量也很难让人满意. 相信大多数公司写文档都是用 Word, 笔者也是用了 Word 写了好几个项目的文档. 架构, 设计, 运维等好几份, 呵呵, 即便是写的再好, 交给客户也基本是不看的. 一个文档是项目组内好几个成员编写的, 大家各写各的模块, 各自的实现, 然后一起合并, 合并时修改字体, 字号, 目录等, 第一次合并还好, 再升级几个版本后, 大家改了哪里, 没改哪里, 根本

有人说,越低级的程序越难学,越高级的程序越容易学?

学Python是不是很难?是不是越低级的程序越难学,越高级的程序越容易学呢? 仔细分析一下,Python编程一句话:写起来快,看起来明白. 随着编程越来越普及,连小学生的教材里,也有了Python入门的课程,可见人工智能时代学会一门编程语言有多么重要. 所以,表面上来看,越高级的程序越容易学. 但是,如果要学习高级Python编程语言,还是比较难的,这也很正常,如果所有的程序学习起来都那么简单,那人间岂不是到处都是程序员了,Python程序员的薪资水平也不会一路看涨了.那么如果是小白,要学习Py

【译】 AWK教程指南 11递归程序

awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束--该变量不论在function外或 function内皆可使用,只要变量名称相同所使用的就是同一个变量,直到程序结束.因递归函数内部的变量,会因它调用子函数(本身)而重复使用,故编写该类函数时应特别留心. 例如:执行 awk ' BEGIN { x = 35 y = 45 test_variable( x ) printf("Return t

ASP.NET MVC应用程序把文字写在图片上

原文:ASP.NET MVC应用程序把文字写在图片上 Insus.NET实现这篇<MVC把随机产生的字符串转换为图片>http://www.cnblogs.com/insus/p/3624235.html 之后,把字符串转换为图片,不如尝试,把字符串写在一张图片之上.好像有点添加水印的意思. 如果你了解此篇,实现水印的功能也自然懂得了. 参考下面方法,是核心的功能函数,传入文本,以及图片,返回的是Bitmap: 创建控件器,编写两个Action: 接下来,创建视图: 演示: ASP.NET M

C#程序调用C++写的dll传递string出现bad ptr

本来是做C/C++的,因为项目需要,所以才搞的C#,说实话,很鄙视做C#的,总结起来,扯淡的DllImport,有本事别用这破玩意,看你C#还能干啥? 参考网上的按照下面的方式来,结果在C++的dll库中打断点,第二个参数怎么都是bad ptr,郁闷至极,耗费了两天的功夫,都没有搞定,也参考了:http://blog.csdn.net/yongshengsilingsa/article/details/7917877 的文章,也无济于事.最后就索性自己再写个简单的dll和exe,只有一个接口,调

程序员如何写出一份好的文档?(转)

程序员如何写出一份好的文档? 分类: 杂谈2015-06-10 16:37 1249人阅读 评论(6) 收藏 举报 在实际的软件开发工作中,除了编写代码之外,程序员还会花大量的时间来编写相关的研发文档,这些文档包括:详细设计文档.单元/集成测试文档.软件版本开发报告.软件安装说明.软件升级指导书等. 在<程序员既要写好代码,又要写好文档>(http://www.zhouzhaoxiong.com/142.html)一文中,我提到过:“代码”和“文档”就像是一个人的左膀右臂,一定要让两者均衡发展