c++ - 如何将此 JavaScript 代码转换为 C++
问题描述
问题是从给定数组中返回任何一个组合,总和为目标。我是 C++ 新手。如何完成下面的函数howSum()?我不能在这里返回 null,因为返回类型是向量。另外我在传递向量时遇到了麻烦。
JavaScript:
const howSum = (targetSum, numbers) => {
if (targetSum === 0) return [];
if (targetSum < 0) return null;
for (let num of numbers) {
const remainder = targetSum - num;
const remainderResult = howSum(remainder, numbers);
if (remainderResult !== null)
{
return [...remainderResult, num];
}
}
return null;
};
C++:
vector<int> howSum(int targetSum, vector<int> numbers)
{
if(targetSum == 0) return {};
if(targetSum < 0) return; //can't return null here in C++
for (int i = 0; i < numbers.size(); i++)
{
int remainder = targetSum - numbers[i];
vector<int> remainderResult = howSum(remainder, numbers);
if(pass)
{
pass
}
}
}
解决方案
您可以使用 C++17std::optional
并std::nullopt
在它不包含值时返回。
#include <optional>
#include <vector>
std::optional<std::vector<int>>
howSum(int targetSum, const std::vector<int>& numbers) {
if (targetSum == 0)
return std::vector<int>{};
if (targetSum < 0)
return std::nullopt;
for (auto numer : numbers) {
const auto remainder = targetSum - numer;
auto remainderResult = howSum(remainder, numbers);
if (remainderResult) {
remainderResult->push_back(targetSum);
return remainderResult;
}
}
return std::nullopt;
}
推荐阅读
- angular - 如何运行角度应用程序?
- javascript - 将网站操作链接添加到 android 本机共享小部件?
- ios - IOS企业自发行不可下载
- ios - 我可以在 ios swift 内置方法(如 print())上添加警告或错误消息,以便如果有人使用该方法,他们可以发出警告消息吗?
- java - Zookeeper 不适用于安装在 32 位 Windows 上的 JRE
- java - “pl00092”:空值:IDP 没有回复断言
- tortoisegit - 如何使用 TortoiseGit 执行 git 命令 `git reset --hard origin/master`?
- reporting-services - 计算 SSRS 中条件格式表达式的百分比
- ios - UISearchBar layout inconsistency between iOS 11 and iOS 9.3
- azure - Azure - 我们可以使用服务管理 API 通过 XAMPP 本地主机创建/更新/删除资源吗?