我在技术回合中遇到过这个项目。他们给我这个程序,用于删除给定整数中的重复数字而不使用数组或字符串。
示例:
int i = 123134254;
预期输出:12345
答案 0 :(得分:7)
您可以使用int
作为一组来存储您已经遇到过的数字,方法是将每个数字(0,1,2,...,9)分配给所说的{{ 1}}。然后,您可以循环遍历int
的数字,并通过查阅此集合来构建新的唯一数字。请注意,我首先反转i
的数字,以便我可以轻松地按顺序循环它们:
i
12345
答案 1 :(得分:2)
您可以使用%
和/
运算符提取i的数字。
d0 = i % 10
是LSB数字
d1 = ((i - d0) / 10) % 10
是第二位数字
...
等等。
这将为您提供从右到左的所有数字。
由于您不允许将它们放入数组中,因此请将它们放入堆栈中(希望这是允许的)。这将允许您从堆栈中从左到右弹出它们。
对于您从Stach中弹出的每个数字,将其存储在一组重复项中,并且只有当它不在该Set中时,才输出它。
现在,要创建输出int,每次输出数字时都会以这种方式修改输出:
output = output * 10 + digit;
答案 2 :(得分:1)
1:反转号码
2:得到最后一位数1乘1
3:用答案
中的所有数字检查这个数字
4:如果没有重复发现将其添加到答案中
int i = 123134254;
int copy = 0;
while (i > 0) {
copy = (copy * 10) + (i % 10);
i /= 10;
}
int dig = copy % 10;
int ans = dig;
copy /= 10;
while (copy > 0) {
boolean flag = false;
dig = copy % 10;
long copy2 = ans;
while (copy2 > 0) {
if (copy2 % 10 == dig) {
flag = true;
break;
}
copy2 /= 10;
}
if (!flag) {
ans = ans * 10 + dig;
}
copy /= 10;
}
System.out.println(ans);