求一数据比较算法

jayray007 2008-07-30 03:43:58
10000到99999之间找出所有只有两个不同数字的数,怎么写条件语句啊?
比如10011 22332 78777
不使用正则表达式
不计较运行效率,当然越快越好
...全文
179 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2008-07-31
  • 打赏
  • 举报
回复
10000 - 11110 类似于二进制连续区间 其他数替换0 1即可 总数 P(10, 2) * 15 × 9/10 = 1215
janrn 2008-07-30
  • 打赏
  • 举报
回复
明显得用排列组合来做,用For是最笨的办法,真正在项目开发中,这样做肯定不行的.

引用 2 楼 fosjos 的回复:
0-9取出2个不同数字

然后2^5排列,判断开头是否是0

最后根据 个数 <=2 还是 个数==2 ?
排除全部相同的11111,22222,33333,...


支持!!这个的
clarck_913 2008-07-30
  • 打赏
  • 举报
回复
这........


这这这

我不服啊楼主

明显我的代码最简单

而且我的只用了104083899纳秒 得7分

6楼的朋友代码用时151052718纳秒 得6分

5楼的朋友的代码用时303125955纳秒 得20分

4楼的朋友的代码用时179746029纳秒 得7分

你贴得这个最慢6724494594纳秒,好歹我们四个还是一个数量级的呢。而且你的代码里还有多余的输出。



这不是打击我吗??
jayray007 2008-07-30
  • 打赏
  • 举报
回复

解决
也要感谢提供其他方法的朋友
import java.util.ArrayList;
import java.util.List;


public class Temp {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 10000; i <= 99999; i++) {
int j = i;
String binaryString = Integer.toString(j, 10);
for (int k = 0; k < binaryString.length(); k++) {
String digital = binaryString.substring(k, k + 1);
System.out.println(digital);
if (!list.contains(digital)) {
list.add(digital);
}
}
if (list.size() == 2) {
System.out.println("Bingo! " + j);
}
list.clear();
}

}
}

thevone 2008-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fosjos 的回复:]
0-9取出2个不同数字

然后2^5排列,判断开头是否是0

最后根据 个数 <=2 还是 个数==2 ?
排除全部相同的11111,22222,33333,...
[/Quote]

支持!!
爱摸鱼de老邪 2008-07-30
  • 打赏
  • 举报
回复
一个想法:取各位的数字遍历其他数字位求差值,如果差值只有1个or2个值,正常,是要求的结果;如果出现差值大于等于3个值,则排除该数?反正LZ不要求效率,呵呵。不知道想法有没有问题,欢迎大家讨论。
mayuanfei 2008-07-30
  • 打赏
  • 举报
回复
晕,写慢了
ldy214 2008-07-30
  • 打赏
  • 举报
回复
方法还不少,那个最有效。
jyq0105 2008-07-30
  • 打赏
  • 举报
回复
long begin=System.currentTimeMillis();
for(int i=10000;i<=99999;i++)
{
char [] aa=(i+"").toCharArray();
int count=0;
for(int j=1;j<5;j++)
{
if(aa[0]!=aa[j])
{
count++;
}
if(count>1)
{
break;
}
}
if(count==1)
{
System.out.println(i);
}
}
long end=System.currentTimeMillis();
System.out.println(end-begin);
mayuanfei 2008-07-30
  • 打赏
  • 举报
回复

public class TwoSameNumber {
public boolean isTwoNumber(int number) {
HashSet<Integer> set = new HashSet<Integer>();
int[] array = this.number2Array(number);
for(int num : array) {
set.add(num);
}
if(set.size()==2) return true;
return false;
}

private int[] number2Array(int number) {
String numString = String.valueOf(number);
int[] array = new int[numString.length()];
for(int i=0;i<numString.length();i++) {
array[i] = Integer.parseInt(numString.substring(i, (i+1)));
}
return array;
}

public static void main(String[] args) {
TwoSameNumber number = new TwoSameNumber();
for(int i=10000;i<=99999;i++) {
if(number.isTwoNumber(i)) System.out.println(i);
}
}

}
imA 2008-07-30
  • 打赏
  • 举报
回复
public class NumberCompare {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=10000;i<100000;i++){
if(judge(i))
System.out.println(i);
}
}
public static boolean judge(int i){
char[] chars=Integer.toString(i).toCharArray();
java.util.Map map=new java.util.HashMap();
for(int index=0;index<chars.length;index++){
map.put(new Character(chars[index]), null);
}
if(map.size()==2)
return true;
return false;
}
}



利用HashMap的中键值的唯一性判断,但是性能不如利用排列组合进行判断的方法
clarck_913 2008-07-30
  • 打赏
  • 举报
回复


public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=10000;i<99999;i++)
{
String str=String.valueOf(i);
HashSet set=new HashSet();
for(int j=0;j<str.length();j++)
{
set.add(str.charAt(j));
}
if(set.size()==2)
{
System.out.println(i);
}
}
}




接分
fosjos 2008-07-30
  • 打赏
  • 举报
回复
0-9取出2个不同数字

然后2^5排列,判断开头是否是0

最后根据 个数<=2 还是 个数==2 ?
排除全部相同的11111,22222,33333,...

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧