Java基础问题:输入一个数字获取对应范围及长度的所有不重复的数字,例如:输入3.则输出{123,132,213,231,321,312}
来源:互联网 发布:淘宝卖家火拼在哪里 编辑:程序博客网 时间:2024/06/05 03:42
输入一个数字获取对应范围及长度的所有不重复的数字,例如:输入3.则输出{123,132,213,231,321,312}
- 首先我们要理清楚解决问题的思路。
- 我们所需要获取的数字和所输入数字是什么关系?
- 如何来定义变量,并且赋值?
- 编写一个怎样的方法来获取我们所需要的数字?
- 废话不多说让我们来解决这些问题。
- 问题一:我们所需要获取的数字和所输入数字是什么关系?
- 根据问题我们可以获得的信息是:
1.输入3出现的每位数的取值范围就是1到3,所以判断出所需要获取的数字的取值范围。
2.输入3出现的每个数字都为三位数,所以判断出所需要获取的数字的位数。
3.每一位数字都是不同的。 - 问题二:如何来定义变量,并且赋值?
- 根据问题一的答案我们可以定义出两个变量
1.char [] valueRange 定义取值范围的数组,用来储存对应的取值范围。
2.char [] aimValue 定义目标值数组,用来存储获取到的每一个值。
3.通过重载构造方法来赋值。 - 问题三:编写一个怎样的方法来获取我们所需要的数字?
- 根据问题我们所能分析得出的思路是使用递归方法fibnacci()。
1.需要遍历valueRange数组来一个个填充进aimValue数组。
2.因为需要对aimValue数组添加元素,所以方法需要传入一个固定的下标值index来控制对应的aimValue的下标。
3.因为需要将valueRange的值赋值给aimValue中的元素所以使用for循环。 - 其他处理方法
- 根据问题需求我们还需要加入以下方法
1.处理每次获取到的数字每一位数都不重复的方法getStandard(char [] aimValue)。
2.将输入的数字转化为取值范围的方法disposeInteger(int i)。
以下是实现代码
import java.util.HashSet;public class OnlyNumber { //存储取值范围 private char[] valueRange; //存储目标字符串长度为字符串长度 private char[] aimValue; //用来储存所有收集到的数字 private static HashSet<String> hs = new HashSet<String>(); /** * 空构造函数 */ public OnlyNumber(){} /** * 构造函数初始化取值范围和目标字符串 * @param valueRange */ public OnlyNumber(char[] valueRange) { this.valueRange = valueRange; //设置目标数字的长度 this.aimValue = new char[valueRange.length]; } public HashSet<String> getHs() { return hs; } public void setHs(HashSet<String> hs) { this.hs = hs; } /** * 判断目标字符串是否重复 * @param aimValue * @return */ public boolean getStandard(char [] aimValue) { //定义一个HashSet来接收数值中数字 HashSet hs = new HashSet(); //循环添加 for (int i = 0; i < aimValue.length; i++) { hs.add(aimValue[i]); } /** * 判断char数组长度和Set集合大小是否相等。 * 原理:Set集合会过滤掉相同的数据。 */ if(aimValue.length==hs.size()) { return true; } else { return false; } } /** * 通过递归算法获取所有能组成的字符串 * @param index * @return */ public void fibnacci(int index) { //遍历取值范围 for (int i = 0; i < valueRange.length; i++) { //将valueRange的第i个值赋值给aimValue的第index的值 aimValue[index] = valueRange[i]; //判断valueRange是否还有空间接收值,如果有就递归。 if(index+1<aimValue.length) { fibnacci(index+1); } //判断每个数字是否符合规范 else if(getStandard(aimValue)) { hs.add(String.valueOf(aimValue)); } } } /** * 处理输入的参数 * @param i */ public void disposeInteger(int i) { String str = ""; //将输入的参数转化为取值范围 for (int j = 1; j <= i; j++) { str += j; } //实例化对象调用递归方法 new OnlyNumber(str.toCharArray()).fibnacci(0); } /** * main函数 * @param args */ public static void main(String[] args) { OnlyNumber OnlyNumber = new OnlyNumber(); OnlyNumber.disposeInteger(3); for (String string : OnlyNumber.getHs()) { System.out.println(string); } }}
就是这样了会有很多不足的地方,需要改进的地方请补充。
日期:2017/8/27
时间:18:20
阅读全文
0 0
- Java基础问题:输入一个数字获取对应范围及长度的所有不重复的数字,例如:输入3.则输出{123,132,213,231,321,312}
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- Java面试题--输入一个数字输出对应的汉字
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- 项目39.3-1输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
- 编写程序显示由数字组成的平行四边形图案。从键盘输入一个整数(£40),则输出对应的图案。例如输入4,则输出为:
- 输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 控制textBox的输入数字长度与范围
- java 输入数字 输出对应周几
- 编写程序,用户输入一个位以上的整数,输出其百位以上的数字。例如用户输入1234.则程序输出12.
- 输入一个数字,输出汉字的写法!
- 输入一组数字要求倒序输出,例如输入为123输出是321
- 输入中文日期输出对应的数字格式的日期
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- PAT1007. 素数对猜想 (20)
- 2.4 多态和虚函数
- LOJ刷题记录:2024-2029(SHOI2016)
- Maven学习笔记---配置eclipse中maven环境
- MOOC清华《面向对象程序设计》第4章:函数模板的特化实验
- Java基础问题:输入一个数字获取对应范围及长度的所有不重复的数字,例如:输入3.则输出{123,132,213,231,321,312}
- DramWeaver编辑器
- python连接mysql
- Android客户端之“微服私访”App的系统学习(八)调用系统摄像头拍照并管理照片并使用Okhttp上传文件至后台
- HDU3333
- 2.5 运算符重载
- EasyUI学习总结——EasyUI布局
- Python笔记(十)--while循环语句
- Android与Html5交互第二篇章