按要求罗列所有字符串字符序列
描述
针对1、2、2、3、4、5这6个数字,编写一个函数,打印出所有不同的排列,要求4不能排第三位,3和5不能相连。
分析
可以利用图的深度遍历。
3和5不能相连 - 意味图中3和5不直连。
4不能排第三位 - 这个可以在遍历后做判断。
注意:由于题中6个数有重复,故遍历时是有重复的序列的,故使用了set过滤了重复的元素。
代码
import java.util.HashSet; import java.util.Iterator; import java.util.Set;public class Test {private int[] numbers = {1, 2, 2, 3, 4, 5};private int n = numbers.length;private boolean[] visited = new boolean[n];private int[][] graph = new int[n][n];private String combination = "";public Set<String> getAllCombinations() {buildGraph();Set<String> set=new HashSet<String>();for(int i=0;i<n;i++){this.depthFirstSearch(i,set); //每个节点都出发一遍 }return set;}/** 从start节点开始深度遍历* */private void depthFirstSearch(int start,Set<String> set){visited[start]=true;combination=combination+numbers[start];if(combination.length()==n){if(combination.indexOf("4")!=2)set.add(combination);}else{for(int j=0;j<n;j++){if(graph[start][j]==1&&visited[j]==false)depthFirstSearch(j,set);}}combination=combination.substring(0,combination.length()-1); //[0,length()-1)visited[start]=false;}/** 建图* */public void buildGraph() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i == j)graph[i][j] = 0;elsegraph[i][j] = 1;}}//确保3到5无连线graph[3][5] = 0;graph[5][3] = 0;}public static void main(String[] args) {Test test=new Test();Set<String> set=test.getAllCombinations();Iterator<String> iter=set.iterator();while(iter.hasNext()){System.out.println(iter.next());}} }
转载于:https://www.cnblogs.com/zadomn0920/p/6361455.html
按要求罗列所有字符串字符序列相关推荐
- 剑指offer:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abc ...
- java可变长字符串类型,Java 常用类——StringBufferamp;StringBuilder【可变字符序列】_IT技术_软件云...
一.字符串拼接问题 由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象. Demo: 1 public class StringDemo { 2 pub ...
- python从右向左第三个字符_字符串是一个字符序列,例如,字符串s,从右侧向左第3个字符用什么索引?_学小易找答案...
[填空题]表达式 'aaasdf'.rstrip('af') 的值为 _______________ . [填空题]表达式 'Hello world!'.count('l') 的值为 ________ ...
- python用什么方式可以打印换行字符串_字符串是一个连续的字符序列,用________方式打印出可以换行的字符串。...
[多选题]关于赋值语句的作用,错误的描述是( ) [多选题]Python中布尔变量的值为( ) [多选题]关于 Python 语言的注释,以下选项中描述正确的是( ) [其它]根据CAD原文件绘制别墅 ...
- python从右向左第三个字符_字符串是一个字符序列,例如,字符串s,从右侧向左第3个字符用________索引。...
[判断题]已知 x, y = 3, 5,那么执行x, y = y, x 之后,x的值为15. [多选题]Python 中对变量描述正确的选项是( ) [单选题]字符串是一个连续的字符序列,用_____ ...
- String:字符串 - 不可变的字符序列(字符数组)
一.构造 字符串 -> 字符数组包装成的对象 char[] cs = {'h','e','l','l','o'};System.out.println(cs);//hello String st ...
- 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]
传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...
- 循环遍历Java字符串字符的规范方法——类似python for ch in string
比如我将string作为CNN 文本处理输入: float [] input = new float[maxLength]; // 1 sentence by maxLenWords// int[] ...
- Java的知识点21——String类、StringBuffer和StringBuilder、不可变和可变字符序列使用陷阱
String类 String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为"不可变对象" substring()是对字符串的截取操作,但本质是读取原 ...
最新文章
- 云计算之路:数据库迁移方案
- centos7安装tensorflow_gpu完整教程
- CentOS 7 巨大变动之 firewalld 取代 iptables
- 计算矩阵的逆和行列式的值(高斯消元+LU分解)
- arch linux简体中文,User-mode Linux (简体中文)
- HTML5表单提交和PHP环境搭建
- Ubuntu: 谷歌日历指示器托盘软件
- 人工智能(3)---未来已来,如何成为一名人工智能产品经理
- 云原生带来的云安全机遇
- java循环嵌套显示不全_循环嵌套问题
- Python编写九九乘法表代码以及解决方案
- 区块链底层架构概览:第一原则框架
- 关于检索关键字的常用四种方法
- Sklearn实现SVC
- 【合金装备xp热门主题】
- 计算机毕业设计SSM常见病辅助食疗系统【附源码数据库】
- Matplotlib之条形图绘制
- postman--断言写法
- wangeditor富文本编辑器的一些坑
- 湖北省鄂州市谷歌高清卫星地图下载