如何检查一个数字是否以任何顺序包含它自己?
问题描述:
我试图做一些事情,我有两个数字(比如说123和321)。我想检查第一个数字是否与第二个数字相同。我知道如果我单独检查1,2和3,该怎么做,但我想检查整个整数。换句话说,我需要一个代码,上面写着“如果x与和(以任意顺序)具有相同的数字,那么......” 任何帮助都非常感谢!如何检查一个数字是否以任何顺序包含它自己?
答
不确定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");
}
}
}
你绝对可以整理它,但我相信它解决了你陈述的问题。
答
编辑:基本思想:该算法只是将出现在“a”中的所有数字存储在一个集合中,并检查是否存在“b”中不存在的任何数字。
这里是一些实现这个逻辑的代码。它基本上利用了这个事实,即Set不包含重复的元素。 HashSet可以执行add,包含在一个常量时间内,加上最大的数字大小设置为10,该函数可以在O(n)中执行。
public boolean checkSameDigits(int x, int y){
String a = Integer.toString(x);
String b = Integer.toString(y);
Set digits = new HashSet();
for(int i = 0; i < a.length(); i++) {
digits.add(a.charAt(i));
}
for(int i = 0; i < b.length(); i++) {
if(!digits.contains(b.charAt(i)))
return false;
}
return true;
}
答
如果转换每个数字到数字的排序列表,那么你可以只比较这两个名单:
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;
}
那么接下来sortedDigits(number1, 10).equals(sortedDigits(number2, 10))
将检查数字是10为基数
答
相当短的实施是为了得到每一个char[]
,排序,并检查它们是相同的:
import java.util.Arrays;
public class Whatever {
public static final boolean sameDigits(final int m, final int n) {
final char[] m2 = ("" + m).toCharArray();
final char[] n2 = ("" + n).toCharArray();
Arrays.sort(m2);
Arrays.sort(n2);
return Arrays.equals(m2, n2);
}
}
将两个字符串拆分为整数列表,对列表进行排序然后进行比较。 –
如果其中任何一个数字都是负数,您希望发生什么? – sprinter
@sprinter我其实并没有想过这件事。因为我试图做一个小型的博彩游戏,所以这些数字不会是负面的。所以它会说:“如果你投注数字123,赢的数字是123,你赢600美元(作为一个例子)。如果你投注123,赢的数字是231,你赢了200美元(因为你有相同的数字,但是按照错误的顺序),如果你投注了123并且数字是586,那么你输了。“如果数字是负数,我可能会说“这不是一个有效的投注或中奖号码”。 – Andre