Java 给定一个数字,返回具有非重复数字的数字的计数,直到该数字从1开始?
假设这意味着两个连续的数字不可能是相同的。 如果这意味着所有数字都是唯一的,那么逻辑也非常相似Java 给定一个数字,返回具有非重复数字的数字的计数,直到该数字从1开始?,java,algorithm,Java,Algorithm,假设这意味着两个连续的数字不可能是相同的。 如果这意味着所有数字都是唯一的,那么逻辑也非常相似 import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; class solution { public static void main(String[] args) { Scanner scan = new Scanner(S
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
class solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int no = scan.nextInt();
int count = 0;
for(int i=1;i<=no;i++)
{
String a = Integer.toString(i);
char[] b =a.toCharArray();
Arrays.sort(b);
String x = new String(b);
// System.out.println("Sorted array:"+x);
int flag = 0;
if(a.length()>1)
{
for(int j=1;j<a.length();j++)
{
//System.out.println(b[j-1]+"=="+b[j]);
if( (b[j-1]==b[j]))
{
flag =1;
// System.out.println("Has Repeated Numbers!");
break;
}
}
}
if(flag == 0)
{
count++;
// System.out.println("count:"+count+" --> "+"No:"+a);
}
}
System.out.println("Final Count:"+count);
}
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int no=scan.nextInt();
整数计数=0;
对于(int i=1;i1)
{
对于(int j=1;j我的逻辑中出现的错误是,这里我假设没有两个数字可以是相同的,但是仔细观察问题陈述它表明没有两个连续的数字不能是相同的
以下是上述输入测试用例的工作代码。感谢Paul Hankin的指出
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
class solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int no = scan.nextInt();
int count = 0;
for(int i=1;i<=no;i++)
{
String a = Integer.toString(i);
char[] b =a.toCharArray();
int flag = 0;
if(a.length()>1)
{
for(int j=1;j<a.length();j++)
{
//System.out.println(b[j-1]+"=="+b[j]);
if( (b[j-1]==b[j]))
{
flag =1;
// System.out.println("Has Repeated Numbers!");
break;
}
}
}
if(flag == 0)
{
count++;
//System.out.println("count:"+count+" --> "+"No:"+a);
}
}
System.out.println(count);
}
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int no=scan.nextInt();
整数计数=0;
对于(int i=1;i1)
{
对于(int j=1;j使用正则表达式
int count = IntStream.rangeClosed(1, n)
.mapToObj(Integer::toString)
.filter(s -> s.matches("(?!.*?(.)\\1).*"))
.count();
这仍然是你可以/应该学会自己调试的东西,但是这个新手问题比我今天看到的大多数其他问题都要好得多,所以你得到了我的投票。String a
和char[]
数组是for循环的局部数组。考虑到字符串是不可变的,您可能需要重新考虑它。您可以改用StringBuilder,所以像707这样的数字也不应该被计算?此时,您的代码将被计算为707,对吗?据我所知,它不应该被计算为7(重复两次)在给定的数字707中。@Nickziebert您写下“假设这意味着两个连续数字不能相同”。但您的回答和评论在此假设这意味着没有两个数字可以相同。请看哪一个测试用例相同,我显示“没有两个连续数字”的解释确实正确。我想您的意思是,没有两个连续数字可以相同(在“can”和“be”之间没有“not”)