博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串的排列
阅读量:7281 次
发布时间:2019-06-30

本文共 1331 字,大约阅读时间需要 4 分钟。

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

 

public ArrayList
Permutation(String str) { ArrayList
result = new ArrayList
(); if (str == null || str.length() > 9 || str.length()==0) { return result; } str = str.trim(); Permutation(str.toCharArray(), 0, result);// HashSet
hs = new HashSet
(result); //此仅去重,没有字典序排列,可能错误// new ArrayList
(hs); Collections.sort(result); //字典序排列 有些oj要求 return result; } public static void Permutation(char[] data, int beginIdx,ArrayList
result) { if (beginIdx == data.length) { result.add(new String(data)); } else { for (int i = beginIdx; i < data.length; ++i) { //有重复字符时,跳过 if(i!=beginIdx && data[i]==data[beginIdx]) continue; //当i==begin时,也要遍历其后面的所有字符; //当i!=begin时,先交换,使第begin位取到不同的可能字符,再遍历后面的字符 char temp = data[beginIdx]; data[beginIdx] = data[i]; data[i] = temp; Permutation(data, beginIdx + 1, result); //为了防止重复的情况,还需要将begin处的元素重新换回来 恢复打扫战场,恢复为原来子串, data共享 temp = data[beginIdx]; data[beginIdx] = data[i]; data[i] = temp; /* 举例来说“b(acd)” acd排列 ,为什么使用了两次swap函数? 函数栈变化恢复 , "acd第一次输出 cda后,完全退栈 返回data应该还是acd" 交换栈 退栈 bacd bacd bcad bcad bcda 打印 -> bcda */ } } }

  

转载地址:http://hhzjm.baihongyu.com/

你可能感兴趣的文章
列举业界关于WiFi的十大常见误解
查看>>
智能家居让你当“甩手掌柜”
查看>>
《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.7 与建立人机交互界面相关的外设的中断服务程序挂接...
查看>>
Android网络安全性配置
查看>>
菲律宾抓获一名攻陷选举委员会网站的黑客
查看>>
改善云迁移安全性最有效的三种方法
查看>>
德仪第三季度营收36.75亿美元 利润9.68亿美元
查看>>
OpenDaylight执行董事Neela Jacques:SDN/NFV是未来网络的关键
查看>>
NEC摘得NIST视频面部识别性能测试桂冠
查看>>
市场潜力大,车企纷纷进入车联网前装市场
查看>>
海尔并购全球最大平板太阳能制造商
查看>>
【SVN】总结(1):svn常见问题(2016-01-06)
查看>>
DevOps顾问行业开始快速增长
查看>>
Win10强势,微软必应搜索广告业务增长21%
查看>>
工信部公布29款问题手机App:极速WiFi万能钥匙上榜
查看>>
最具创新能力企业评选 苹果再度登顶
查看>>
2017年直播群雄逐鹿:社交直播会否收割行业未来?
查看>>
数据中心运维需要的三大认证
查看>>
诺基亚推物联网解决方案:创造可编程的世界
查看>>
如何利用开发者账号重签ipa文件,并部署到IOS设备做测试
查看>>