public static int solution(int x, int y) {
// Edit your code here
int i = 0;
int temp = 0;
int num = y - x + 1;
for(i = x; i<=y; i++)
{
int temp1 = i;
while(temp1!=0)
{
temp = temp1%10;
//System.out.println(temp);
temp1 = temp1/10;
//System.out.println(temp1+" "+"111");
if(temp1 != 0 && temp != temp1%10){num = num - 1; break;}
}
}
return num;
}
这段代码的作用是计算在给定范围 [x, y] 内的数字个数,这些数字满足某种条件。具体来说,代码检查这些数字是否包含了至少两个不同的数字。如果一个数字的每一位都与其他位的数字相同(例如 111、2222 等),则该数字会被排除在结果之外。
代码逐行解释:
-
int i = 0;
初始化变量i用作循环计数器。 -
int temp = 0;
初始化变量temp,用于存储数字的当前位。 -
int num = y - x + 1;
计算范围内数字的初始计数(包含x和y)并赋值给num。 -
for(i = x; i<=y; i++)
开始一个循环,遍历从x到y的所有整数。 -
int temp1 = i;
将当前循环的数字i赋值给temp1,用于后续的操作。 -
while(temp1!=0)
当temp1不为零时,继续循环,用以检查数字的每一位。 -
temp = temp1%10;
取temp1的最右边一位数字,存储到temp。 -
temp1 = temp1/10;
将temp1除以 10,去掉最右边的数字,准备处理下一位。 -
if(temp1 != 0 && temp != temp1%10){num = num - 1; break;}
检查temp1是否不为零且temp(之前保存的数字)与temp1的最右边数字是否不同。如果不同,说明这个数字有不同的位,减少计数num并跳出当前数字的检查。 -
}
结束内层while循环。 -
}
结束外层for循环。 -
return num;
返回满足条件的数字数量num。 总结:
- 代码旨在计算
x到y之间的数字中,具有至少两个不同数字的数字数量。 - 例如,在范围 111 到 119 之间,只有 111 是不符合条件的(因为它的所有位都相同),所以结果应该是 9。
这段代码的目的是计算给定范围
[x, y]内的整数中,所有具有不同相邻数字的整数的数量。具体来说,代码遍历区间内的所有整数,检查每个整数的数字是否与其相邻的数字不同,若有相邻数字相同,则从结果中减去该整数。下面是对代码的逐步解析和解释。
代码解析
-
初始化变量:
int num = y - x + 1; // 计算给定区间的总数num初始化为y - x + 1,表示范围内所有整数的总数。
-
遍历区间内的整数:
for(i = x; i <= y; i++) {- 通过
for循环遍历从x到y的每个整数i。
- 通过
-
检查每个整数的数字:
int temp1 = i; while(temp1 != 0) { temp = temp1 % 10; // 获取当前数的最后一位 temp1 = temp1 / 10; // 去掉最后一位- 使用
while循环来逐位检查当前整数i的每一位数字。 temp存储当前最末尾的数字,temp1则逐渐减少,直到变为0。
- 使用
-
比较相邻数字:
if(temp1 != 0 && temp != temp1 % 10) { num = num - 1; break; }- 在每次迭代中,代码比较当前数字和新的数字。
- 如果
temp1不为0(意味着仍然有数字未检查)并且当前数字temp与新的最后一位数字不等,则说明找到了相邻相同的数字,此时将num减1,并break退出当前while循环,继续检查下一个整数。
-
返回结果:
return num;- 函数返回在
[x, y]范围内不具有相邻相同数字的整数数量。
- 函数返回在
整体特殊情况
- 该代码逻辑流水线简单,通过对每个数字的逐位检测来判断是否有相邻同位数字。
- 比如,对于
121,由于存在相邻数字1和2不同,因此121被认为是有效的;而112则会被减去,因为有相邻数字相同。
复杂度分析
- 时间复杂度:O(n * d),其中
n是从x到y的范围内的数字个数,d是每个数字的位数。虽然理论上最坏情况可能较高,但在实际的输入范围上通常是可以接受的。 - 空间复杂度:O(1),因为除了常数变量之外,没有使用额外空间。
总结
该算法有效地检查范围内的每个数字,通过逐位比较判断相邻数字的相同性,从而统计有效的数字个数。虽然实现上使用了较为直接的方式,但在处理大范围输入时,可能会遇到性能瓶颈。针对大规模数据时,可以考虑其他效率更高的数据结构或算法来提升性能。