如何使用之前递归调用的变量?
How can I use a variable from a previous recursive call?
一般问题:
给定一个整数数组 nums 和一个整数 k。如果连续子数组中有 k 个奇数,则称它为 nice。
Returnnice子数组的个数。
我的问题:
我想递归地解决这个问题。我正在努力实现的部分是如何使用以前的每个递归调用中的 count
并总结所有计数,以及 return 最后一个 count
就像它在尝试。
示例:
Input: nums = [1,1,2,1,1], k = 3
Output: 2
Explanation: The only sub-arrays with 3 odd numbers are [1,1,2,1] and [1,2,1,1].
我的尝试:
int helperFunction(vector<int> &nums, int k, int starter, int count)
{
int sum=0;
if (starter >= nums.size())
{
return count;
}
for (int i = starter; i < nums.size(); i++)
{
if (nums[i] % 2 == 1)
{
if (++sum == k)
{
count += nums.size() - i;
sum = 0;
}
}
}
return helperFunction(nums, k, starter + 1, count);
}
int numberOfSubarrays(vector<int> &nums, int k)
{
return helperFunction(nums, k, 0, 0);
}
int main()
{
vector<int> mine;
int myints[] = {1, 1, 2, 1, 1};
mine.assign(myints, myints + 5);
cout << "Output : " << numberOfSubarrays(mine, 3);
return 0;
}
Return 值:
这次实际尝试的return值为0,说明程序至少在语法上没有错误。
它不是特别适合递归。可能只需在数组上传递一次即可解决。
也就是说,对您的代码稍作调整就可以使其正常工作。没有理由将计数传递给递归方法。
您的方法计算 'nice' 以给定索引开头的子数组的数量。将其添加到从下一个索引开始的数字,然后 return 它。
int helperFunction(vector<int> &nums, int k, int starter)
{
int sum=0, count=0;
if (starter >= nums.size())
{
return 0;
}
for (int i = starter; i < nums.size() && sum <= k; i++)
{
if (nums[i] % 2 == 1)
{
sum++;
}
if (sum == k)
{
count++;
}
}
return helperFunction(nums, k, starter + 1) + count;
}
我不确定你的计数是否正确。这可以优化很多,但这应该证明递归方法。
一般问题: 给定一个整数数组 nums 和一个整数 k。如果连续子数组中有 k 个奇数,则称它为 nice。 Returnnice子数组的个数。
我的问题:
我想递归地解决这个问题。我正在努力实现的部分是如何使用以前的每个递归调用中的 count
并总结所有计数,以及 return 最后一个 count
就像它在尝试。
示例:
Input: nums = [1,1,2,1,1], k = 3
Output: 2
Explanation: The only sub-arrays with 3 odd numbers are [1,1,2,1] and [1,2,1,1].
我的尝试:
int helperFunction(vector<int> &nums, int k, int starter, int count)
{
int sum=0;
if (starter >= nums.size())
{
return count;
}
for (int i = starter; i < nums.size(); i++)
{
if (nums[i] % 2 == 1)
{
if (++sum == k)
{
count += nums.size() - i;
sum = 0;
}
}
}
return helperFunction(nums, k, starter + 1, count);
}
int numberOfSubarrays(vector<int> &nums, int k)
{
return helperFunction(nums, k, 0, 0);
}
int main()
{
vector<int> mine;
int myints[] = {1, 1, 2, 1, 1};
mine.assign(myints, myints + 5);
cout << "Output : " << numberOfSubarrays(mine, 3);
return 0;
}
Return 值:
这次实际尝试的return值为0,说明程序至少在语法上没有错误。
它不是特别适合递归。可能只需在数组上传递一次即可解决。
也就是说,对您的代码稍作调整就可以使其正常工作。没有理由将计数传递给递归方法。
您的方法计算 'nice' 以给定索引开头的子数组的数量。将其添加到从下一个索引开始的数字,然后 return 它。
int helperFunction(vector<int> &nums, int k, int starter)
{
int sum=0, count=0;
if (starter >= nums.size())
{
return 0;
}
for (int i = starter; i < nums.size() && sum <= k; i++)
{
if (nums[i] % 2 == 1)
{
sum++;
}
if (sum == k)
{
count++;
}
}
return helperFunction(nums, k, starter + 1) + count;
}
我不确定你的计数是否正确。这可以优化很多,但这应该证明递归方法。