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