如何实现firstK函数获取k个满足findSum返回1的数字?
实现
firstK(int k)的正确方式 先点明你当前代码的问题:
while (int x = 0;)不符合Java语法,while循环条件不能这样声明变量,也缺少终止逻辑if (findSum(x) = 1;)误用赋值运算符=而非比较运算符==,还多了多余的分号- 未创建存储结果的数组,也没利用参数
k控制需要收集的数字数量
以下是可用的完整实现,附带注释说明:
public static long[] firstK(int k) { // 初始化结果数组,长度与要求的k一致 long[] result = new long[k]; // 记录已找到的符合条件的数字数量 int foundCount = 0; // 从0开始遍历数字,用long避免大数溢出 long currentNum = 0; // 收集够k个符合条件的数字就停止循环 while (foundCount < k) { // 调用你的findSum判断当前数字是否满足条件 if (findSum((int) currentNum) == 1) { // 将数字存入结果数组,计数加1 result[foundCount] = currentNum; foundCount++; } currentNum++; } return result; }
关键细节补充:
- 解决类型溢出问题:你的
findSum参数是int,如果遍历的数字超过int最大值(2147483647),强制转换会导致溢出错误。如果需要支持更大的数字,建议修改findSum为接收long类型参数:
public static int findSum(long k) { int sum = 0; boolean foundNonZero = false; for (; k != 0; k /= 10) { if (foundNonZero) { sum += (k % 10) * (k % 10); } else { foundNonZero = k % 10 != 0; } } return sum; }
修改后直接传currentNum即可,无需类型转换。
- 测试示例:调用
firstK(3)会返回[1, 10, 100],这些数字经过findSum计算后返回值为1,符合需求。
内容的提问来源于stack exchange,提问作者Nutnicha
相关产品推荐
相关产品推荐

