繁体   English   中英

给定一个数字,返回具有非重复数字的数字的计数,直到该数字从1开始?

[英]Given a number, return the count of numbers having non-repeating digits till that number starting from 1?

我们假设它意味着两个连续的数字不能相同。 如果这意味着所有数字都是唯一的,那么逻辑也非常相似。

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();

在我的逻辑中出什么问题这里我假设没有两个数字可以是相同的 ,但是在问题陈述中敏锐地看它说没有两个连续的数字不能相同

以下是上述输入测试用例的工作代码。 感谢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);
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM