把1,2,3,4,5,6,7,8,9九个数分成三组,各个数字使用一次
前几天找工作,笔试下面这道题:
把1,2,3,4,5,6,7,8,9共九个数分成三组构成排列a1a2a3,a4a5a6,a7a8a9,而且每个数字使用有且仅有一次,构成的排列之比为3:2:1,求输出所有的排列组合。
方法一:
显然a1a2a3,a4a5a6,a7a8a9在[123, 987]内,进一步就是a1a2a3在[123,329],遍历即可
public static void test1(){long e1 = System.currentTimeMillis();for(int i = 123; i <= 329; i ++){if(match(i, 2*i, 3*i)){System.out.println(i + " " + 2*i + " " + 3*i);}}long e2 = System.currentTimeMillis();System.out.println("time:" + (e2 - e1));
}public static boolean match(int first, int second, int third) {List<Integer> list = Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0);int index = -1;String str = first + "" + second + "" + third;for(int i = 0; i < str.length(); i ++){//遍历每一个字符,在list中记录对应字符出现的次数index = Integer.parseInt(str.substring(i, i + 1)) - 1;//index为零则是取到字符0,需要过滤掉if(index < 0 || index > 8){//过滤return false;}if(list.get(index) >= 1){return false;}else{list.set(index, list.get(index) + 1);}}return true;
}
结果:
192 384 576
219 438 657
273 546 819
327 654 981
time:1
方法二:
使用正则表达式过滤
public static void test1() {long e1 = System.currentTimeMillis();Pattern pattern = Pattern.compile(//不重复字符组成的九位数"([1-9])"+ "(?!\\1)([1-9])"+ "(?!\\1|\\2)([1-9])"+ "(?!\\1|\\2|\\3)([1-9])"+ "(?!\\1|\\2|\\3|\\4)([1-9])"+ "(?!\\1|\\2|\\3|\\4|\\5)([1-9])"+ "(?!\\1|\\2|\\3|\\4|\\5|\\6)([1-9])"+ "(?!\\1|\\2|\\3|\\4|\\5|\\6|\\7)([1-9])"+ "(?!\\1|\\2|\\3|\\4|\\5|\\6|\\7|\\8)([1-9])$");String str = "";Matcher match = null;for (int i = 123; i <= 329; i++) {if (3 * i >= 1000) {break;}str = Integer.toString(i * 1000000 + i * 2 * 1000 + 3 * i);match = pattern.matcher(str);if (match.matches())System.out.println(i + " " + 2 * i + " " + 3 * i);}long e2 = System.currentTimeMillis();System.out.println("time:" + (e2 - e1));
}
结果:
192 384 576
219 438 657
273 546 819
327 654 981
time:3
把1,2,3,4,5,6,7,8,9九个数分成三组,各个数字使用一次相关推荐
- 从言行合一到知行合一
本篇记录突然的随想,偶尔停留 2022-01-17 rest不只是一个简单的api约束分享一本rest小手册,如何把东西变得 RESTful! 2021-12-06 规划 未来编程. 未来需要什么 ...
- springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据
SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...
- 程序主动进行电话短信报警,自定义电话、短信、钉钉报警通知
程序主动进行电话短信报警,自定义电话.短信.钉钉报警通知 一. 规则说明 这里我们要利用到阿里云的云监控的手段,有一个叫做事件监控的东西,可以通过自定义事件上传来进行监控报警. 流程: 程序发现错误 ...
- mysql 快捷查询数据库各表占用空间,mysql查看索引占用空间,mysql查看数据占用空间
先贴一张图! 第一步,"很重要" 在mysql中,有一个创建之初自带的库information_schema,这个库中包含着数据库相关信息,查询数据占用空间就是使用该库,所以首先进 ...
- 关于新技术的引入原则 ——从零开始学架构
不以解决实际问题引入的技术都耍流氓. 新技术的引入不是为了证明自己,而是为了解决实际项目中遇到的问题.希望诸位能够控制住自己的心魔. 新技术的引入要求应该是解决的问题大于带来的问题. 再引入新技术,请 ...
- 阿里云K8S容器服务的使用
使用阿里云k8s构建服务 一. 上传镜像 二. k8s运行 三. 服务配置导入 四. 服务路由 五. 节点亲和性和污点管理 一. 上传镜像 在阿里云控制台找到"容器镜像服务",开启 ...
- 系统架构升级要不要上微服务?历“久”弥新微服务——你真的需要升级微服务架构吗
在 <微服务架构设计模式> 一书中,作者总结了关于微服务的一些"重点",原文如下: 中国企业和开发者对微服务架构的热情让我印象深刻.但如同我给所有客户的忠告一样,我想对 ...
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
- 微信公众号为指定openid用户推送消息
微信公众号为指定openid用户推送消息 微信提供的开放接口中,有两个给指定openid的用户发送信息的接口,适用场景应该是向 预约用户或者中奖用户发送消息. 第一个接口:客服发送消息 请求方式: P ...
- kotlin设置CORS跨域资源共享,java设置允许跨域,服务端如何设置 springboot中设置跨域资源共享
CORS通信过程,都是浏览器或http插件自动完成,不需要 用户/开发人员 参与.对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码是完全一样的.浏览器一旦发现AJAX请求跨源,就会自动添 ...
最新文章
- Tony Qu的《WPF揭秘》情节
- 使用浏览器console批量更改图片的宽度
- fiddler和xampp安装成功后,网站打不开的原因
- Hadoop环境搭建教学(二)完全分布式集群搭建;
- 某人一定不会的——重口味线段树
- 公司管理项目管理中的技巧
- Conv2d中的groups参数(分组卷积)怎么理解? 【分组卷积可以减少参数量、且不容易过拟合(类似正则化)】
- Go实现Raft第二篇:选举
- opengl画的弧线 为什么有一个半径_6个1画生日蛋糕,也太简单啦【图文+视频教程】...
- 转- Oracle Audit 功能的使用和说明
- Java 2实用教程(第五版)
- STM32利用Flymcu进行烧录
- DHCPv6 snooping
- 视觉目标检测-05:使用目标区域的提取方法(手机iVcam与电脑iVcam之间相机的链接)
- 同一服务器中,同一框架下的不同二级域名之间网站session如何互通
- 颜色所代表的人的性格
- C# C++ 互操作:C++向C#输出不定长数组或指针的实现
- 一文了解 AlphaFold 2 背后的 PDB 蛋白质结构数据集
- java js方法_JAVA调用js方法
- 深度学习之BatchNorm(批量标准化)