You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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;
}

关键细节补充:

  1. 解决类型溢出问题:你的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即可,无需类型转换。

  1. 测试示例:调用firstK(3)会返回[1, 10, 100],这些数字经过findSum计算后返回值为1,符合需求。

内容的提问来源于stack exchange,提问作者Nutnicha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:10:37