java - 给定一个数字,返回从 1 开始到该数字不重复的数字的个数?

标签 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(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);
   }
}

输入 1:3456

输出 1:2562

输入 2:22

输出 2:20

输入 3:7

输出 3:7

输入 4:100

输出 4:90

输入 5: 37

输出 5: 34

我的代码满足从 2 到 5 的输入测试用例,但不满足输入 1。 我知道每个数字在数字中都应该是唯一的。谁能说出我在输入 1 的代码中的逻辑错误在哪里?

最佳答案

使用正则表达式!

int count = IntStream.rangeClosed(1, n)
    .mapToObj(Integer::toString)
    .filter(s -> s.matches("(?!.*?(.)\\1).*"))
    .count();

关于java - 给定一个数字,返回从 1 开始到该数字不重复的数字的个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43440240/

相关文章:

algorithm - 这个算法的时间复杂度是多少?这有点棘手

c++ - "if"语句对性能有多大影响?

html - XPath 和 CSS 查询算法的区别

java - 自 API 29 以来,小部件点击振动不起作用

java - 在 Java 中从表创建树数据结构

java - hashmap和多个txt文件java

java permGen内存不足错误tomcat-liferay服务器

Java:端口不可用(在 Windows 7 上)

python - 3 Quicksorts 函数 - 为什么 lambda 版本更慢?提供代码

c++ - 第二次在图上运行时,广度/深度优先搜索会导致崩溃