Java 如何检查一个数字是否以任何顺序包含自身?

Java 如何检查一个数字是否以任何顺序包含自身?,java,algorithm,Java,Algorithm,我试着做一些我有两个数字(比如123和321)的事情。我想检查第一个数字和第二个数字的顺序是否相同。如果我分别检查1、2和3,我知道该怎么做,但我想检查整个整数。换句话说,我需要一个代码,上面写着“如果数字x和数字y(以任何顺序)具有相同的数字,那么…” 非常感谢您的帮助 不确定Java语法,但将每个数字转换为数组。对数组进行升序排序。转换回一个数字并进行比较 如果您不希望精确匹配(即112233和123都共享相同的数字),请遍历1个数组,查看每个数字是否包含在另一个数组中。不确定Java语法,

我试着做一些我有两个数字(比如123和321)的事情。我想检查第一个数字和第二个数字的顺序是否相同。如果我分别检查1、2和3,我知道该怎么做,但我想检查整个整数。换句话说,我需要一个代码,上面写着“如果数字x和数字y(以任何顺序)具有相同的数字,那么…”
非常感谢您的帮助

不确定Java语法,但将每个数字转换为数组。对数组进行升序排序。转换回一个数字并进行比较


如果您不希望精确匹配(即112233和123都共享相同的数字),请遍历1个数组,查看每个数字是否包含在另一个数组中。

不确定Java语法,但将每个数字转换为一个数组。对数组进行升序排序。转换回一个数字并进行比较


如果不希望精确匹配(即112233和123共享相同的数字),则遍历1个数组,查看是否每个数字都包含在另一个数组中。

此代码将两个整数转换为字符串,然后检查字符串是否长度相同,第二个字符串是否包含第一个字符串的所有字符

public class Sandbox { //opens class

    public static void main(String[] args) {
        int x = 125;
        int y = 321;
        boolean hasNumbers = true;
        String a = Integer.toString(x);
        String b = Integer.toString(y);

        if(a.length() == b.length()) {
            for(int i = 0; i < a.length(); i++) {

                if(!b.contains(String.valueOf(a.charAt(i)))) {
                    hasNumbers = false;
                }
            }
            if(hasNumbers) {
                System.out.println(x + " contains the digits of " + y);
            }
            else {
                System.out.println(x + " does not contain the digits of " + y);
            }
        }
        else {
            System.out.println("The length of " + x + " and " + y + " are different");
        }   
    }   
}
公共类沙盒{//打开类
公共静态void main(字符串[]args){
int x=125;
int y=321;
布尔数=真;
字符串a=整数。toString(x);
字符串b=整数。toString(y);
如果(a.length()==b.length()){
对于(int i=0;i

你当然可以把它整理一下,但我相信它解决了你所说的问题。

这段代码将把两个整数转换成字符串,然后检查字符串的长度是否相同,第二个字符串是否包含第一个字符串的所有字符

public class Sandbox { //opens class

    public static void main(String[] args) {
        int x = 125;
        int y = 321;
        boolean hasNumbers = true;
        String a = Integer.toString(x);
        String b = Integer.toString(y);

        if(a.length() == b.length()) {
            for(int i = 0; i < a.length(); i++) {

                if(!b.contains(String.valueOf(a.charAt(i)))) {
                    hasNumbers = false;
                }
            }
            if(hasNumbers) {
                System.out.println(x + " contains the digits of " + y);
            }
            else {
                System.out.println(x + " does not contain the digits of " + y);
            }
        }
        else {
            System.out.println("The length of " + x + " and " + y + " are different");
        }   
    }   
}
公共类沙盒{//打开类
公共静态void main(字符串[]args){
int x=125;
int y=321;
布尔数=真;
字符串a=整数。toString(x);
字符串b=整数。toString(y);
如果(a.length()==b.length()){
对于(int i=0;i

你当然可以把它整理一下,但我相信它解决了你说的问题。

编辑:基本思想:算法只是将“a”中出现的所有数字存储在一个集合中,并检查“b”中是否有不存在的数字

下面是一些实现此逻辑的代码。它基本上利用了这样一个事实,即集合不包含重复的元素。HashSet可以执行加法,包含在一个固定的时间内,加上数字集的最大大小是10,该函数可以在O(n)中执行

public boolean checkSameDigits(int x,int y){
字符串a=整数。toString(x);
字符串b=整数。toString(y);
Set digits=新的HashSet();
对于(int i=0;i
编辑:基本思想:该算法只需将“a”中出现的所有数字存储在一个集合中,并检查“b”中是否存在任何不存在的数字

下面是一些实现此逻辑的代码。它基本上利用了这样一个事实,即集合不包含重复的元素。HashSet可以执行加法,包含在一个固定的时间内,加上数字集的最大大小是10,该函数可以在O(n)中执行

public boolean checkSameDigits(int x,int y){
字符串a=整数。toString(x);
字符串b=整数。toString(y);
Set digits=新的HashSet();
对于(int i=0;i
如果您将每个数字转换为排序后的数字列表,则您只需比较两个列表:

private List<Integer> sortedDigits(int number, int base) {
    assert number >= 0 && base > 0;
    List<Integer> digits = new ArrayList<>();
    for (int n = number; n > 0; n /= base)
        digits.add(n % base);
    digits.sort();
    return digits;
}
private List sortedDigits(整数编号,整数基数){
断言编号>=0&&base>0;
列表位数=新的ArrayList();
对于(int n=number;n>0;n/=base)
数字。添加(n%基数);
数字排序();
返回数字;
}

因此,
sortedDigits(number1,10)。equals(sortedDigits(number2,10))
将检查以10为基数的数字是否相同。

如果将每个数字转换为已排序的数字列表,则可以比较两个列表:

private List<Integer> sortedDigits(int number, int base) {
    assert number >= 0 && base > 0;
    List<Integer> digits = new ArrayList<>();
    for (int n = number; n > 0; n /= base)
        digits.add(n % base);
    digits.sort();
    return digits;
}
private List sortedDigits(整数编号,整数基数){
断言编号>=0&&base>0;
列表位数=新的ArrayList();
对于(int n=number;n>0;n/=base)
数字。添加(n%基数);
数字排序();
返回数字;
}

因此,
sortedDigits(number1,10)。equals(sortedDigits(number2,10))
将检查以10为基数的数字是否相同。

一个相当简短的实现是获得一个
字符[]