描述

针对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

按要求罗列所有字符串字符序列相关推荐

  1. 剑指offer:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。

    汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abc ...

  2. java可变长字符串类型,Java 常用类——StringBufferamp;StringBuilder【可变字符序列】_IT技术_软件云...

    一.字符串拼接问题 由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象. Demo: 1 public class StringDemo { 2 pub ...

  3. python从右向左第三个字符_字符串是一个字符序列,例如,字符串s,从右侧向左第3个字符用什么索引?_学小易找答案...

    [填空题]表达式 'aaasdf'.rstrip('af') 的值为 _______________ . [填空题]表达式 'Hello world!'.count('l') 的值为 ________ ...

  4. python用什么方式可以打印换行字符串_字符串是一个连续的字符序列,用________方式打印出可以换行的字符串。...

    [多选题]关于赋值语句的作用,错误的描述是( ) [多选题]Python中布尔变量的值为( ) [多选题]关于 Python 语言的注释,以下选项中描述正确的是( ) [其它]根据CAD原文件绘制别墅 ...

  5. python从右向左第三个字符_字符串是一个字符序列,例如,字符串s,从右侧向左第3个字符用________索引。...

    [判断题]已知 x, y = 3, 5,那么执行x, y = y, x 之后,x的值为15. [多选题]Python 中对变量描述正确的选项是( ) [单选题]字符串是一个连续的字符序列,用_____ ...

  6. String:字符串 - 不可变的字符序列(字符数组)

    一.构造 字符串 -> 字符数组包装成的对象 char[] cs = {'h','e','l','l','o'};System.out.println(cs);//hello String st ...

  7. 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]

    传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...

  8. 循环遍历Java字符串字符的规范方法——类似python for ch in string

    比如我将string作为CNN 文本处理输入: float [] input = new float[maxLength]; // 1 sentence by maxLenWords// int[] ...

  9. Java的知识点21——String类、StringBuffer和StringBuilder、不可变和可变字符序列使用陷阱

    String类 String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为"不可变对象" substring()是对字符串的截取操作,但本质是读取原 ...

最新文章

  1. 云计算之路:数据库迁移方案
  2. centos7安装tensorflow_gpu完整教程
  3. CentOS 7 巨大变动之 firewalld 取代 iptables
  4. 计算矩阵的逆和行列式的值(高斯消元+LU分解)
  5. arch linux简体中文,User-mode Linux (简体中文)
  6. HTML5表单提交和PHP环境搭建
  7. Ubuntu: 谷歌日历指示器托盘软件
  8. 人工智能(3)---未来已来,如何成为一名人工智能产品经理
  9. 云原生带来的云安全机遇
  10. java循环嵌套显示不全_循环嵌套问题
  11. Python编写九九乘法表代码以及解决方案
  12. 区块链底层架构概览:第一原则框架
  13. 关于检索关键字的常用四种方法
  14. Sklearn实现SVC
  15. 【合金装备xp热门主题】
  16. 计算机毕业设计SSM常见病辅助食疗系统【附源码数据库】
  17. Matplotlib之条形图绘制
  18. postman--断言写法
  19. wangeditor富文本编辑器的一些坑
  20. 湖北省鄂州市谷歌高清卫星地图下载

热门文章

  1. MorGain2020中文版
  2. Incomedia WebSite X5 17中文版
  3. 【学习笔记】Linux 命令万字解析(超详细)
  4. Google-Analytics 学习与思考
  5. 两个div叠加触发事件发生闪烁问题
  6. Webview离线功能(优先cache缓存+cache缓存管理)
  7. win7下简单FTP服务器搭建
  8. ios UIScrollView 中控件自动增加间隔
  9. visual studio visual studio 2005 快捷键大全
  10. 使用 docker 搭建 web 服务环境