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

如何将实现目标和查找的JavaScript howSum代码改写为C++版本

解决方案

针对你遇到的两个核心问题,我们分别处理:

  • 返回值无法为null的问题:C++ 17起提供了std::optional类型,可以表示「有值」或「无值」两种状态,完美匹配你JS代码里返回数组/返回null的逻辑。如果需要兼容更早的C++标准,可以改用「函数返回bool表示是否找到解,同时用引用参数传递结果数组」的方案。
  • vector参数传递问题:你的逻辑中不需要修改输入的numbers数组,所以用const vector<int>&传递即可,既避免了值传递的拷贝开销,也保证了原数组不会被误改。

完整C++17实现(最贴合原JS逻辑)

#include <vector>
#include <optional>
#include <iostream>

using namespace std; // 新手使用可省略std::前缀,降低上手成本

optional<vector<int>> howSum(int targetSum, const vector<int>& numbers)
{
    // 目标和为0,返回空数组表示找到合法解
    if (targetSum == 0) return vector<int>{};
    // 目标和为负,无合法解,返回nullopt对应JS的null
    if (targetSum < 0) return nullopt;

    // 范围for循环,和JS的for of逻辑完全一致
    for (int num : numbers)
    {
        int remainder = targetSum - num;
        auto remainderResult = howSum(remainder, numbers);
        // 子递归返回了有效解
        if (remainderResult.has_value())
        {
            // 把当前数字追加到解的末尾,对应JS的[...remainderResult, num]
            remainderResult->push_back(num);
            return remainderResult;
        }
    }
    // 所有数字都尝试过无合法解,返回nullopt
    return nullopt;
}

// 调用示例
int main() {
    vector<int> nums = {2, 3};
    auto result = howSum(7, nums);
    if (result.has_value()) {
        for (int n : result.value()) {
            cout << n << " ";
        }
    } else {
        cout << "没有找到合法组合" << endl;
    }
    return 0;
}

兼容C11/C03的实现方案

如果你用的编译器不支持C++17,可以用返回bool+引用传结果的方式实现:

#include <vector>
#include <iostream>

using namespace std;

bool howSum(int targetSum, const vector<int>& numbers, vector<int>& result)
{
    if (targetSum == 0) {
        result.clear();
        return true;
    }
    if (targetSum < 0) {
        return false;
    }

    for (int num : numbers) {
        int remainder = targetSum - num;
        vector<int> tempResult;
        if (howSum(remainder, numbers, tempResult)) {
            tempResult.push_back(num);
            result = tempResult;
            return true;
        }
    }
    return false;
}

// 调用示例
int main() {
    vector<int> nums = {2, 3};
    vector<int> result;
    bool hasSolution = howSum(7, nums, result);
    if (hasSolution) {
        for (int n : result) {
            cout << n << " ";
        }
    } else {
        cout << "没有找到合法组合" << endl;
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:03