使用递归时如何保留值

时间:2019-06-20 03:55:58

标签: c++ recursion

我最近正在解决一个leetcode问题:https://leetcode.com/problems/employee-importance/

我还附上以下问题:

您将获得员工信息的数据结构,其中包括员工的唯一ID,重要性值和直接下属的ID。

例如,员工1是员工2的领导者,而员工2是员工3的领导者。它们的重要性值分别为15、10和5。然后,员工1具有[1,15,[2]]之类的数据结构,员工2具有[2,10,[3]],而员工3具有[3,5,[]]。请注意,尽管员工3还是员工1的下属,但关系不是直接的。

现在,给定公司的雇员信息和雇员ID,您需要返回该雇员及其所有下属的总重要性值。

示例1:

输入:[[1、5,[2、3]],[2、3,[]],[3、3,[]]],1 输出:11 说明: 员工1的重要性值为5,他有两个直接下属:员工2和员工3。它们都具有重要性值3。因此,员工1的总重要性值为5 + 3 + 3 = 11。

我使用了这个测试用例: 输入:[[1,5,[2,3]],[2,3,[4,5]],[3,4,[]],[4,6,[]],[5,1, []]],1

下面是我的代码:

/*
// Employee info
class Employee {
public:
    // It's the unique ID of each node.
    // unique id of this employee
    int id;
    // the importance value of this employee
    int importance;
    // the id of direct subordinates
    vector<int> subordinates;
};
*/
class Solution {

        int subImportance(vector<Employee*> employees, vector<int> &_subordinates, int _i, int _count)
    {


            for(int _subid : _subordinates)
            {
                for(int i = 0; i < employees.size(); i++)
                {
                    if(employees[i] ->id == _subid)
                    {
                        _count = _count + employees[i] -> importance;

                        cout<<i<<" "<<_count<<" "<<_subid<<endl;

                       if(employees[i] -> subordinates.size() == 0)
                           break;
                        else
        subImportance(employees, employees[i] -> subordinates, i , _count);
                        }
                }
            }
            cout<<"mark"<<endl;
           return _count;  

    }
public:

    int getImportance(vector<Employee*> employees, int id) {


        int found;
        for(int i = 0; i < employees.size(); i++)
        {
            if(employees[i] -> id == id)
            {
               found = i;
            }
        }

        int count = employees[found] -> importance;

        if((employees[found] -> subordinates).size() == 0 )

            return count;
        else
        {

            return subImportance(employees,  employees[found] ->subordinates, found, count);
        }
    }
};

_count在通过分支1-> 2-> 4-> 5时正确地与雇员[i]->重要性累积,然后到达父节点2的循环的结尾并跳到节点3,但不保留累计值(ID 1 + 2+ 4 + 5的重要性),而是仅保留(1 + 2),然后将3的重要性相加并返回值(我已打印出这些值)。我相信这是因为该函数到达了父级2(2-> 4-> 5)的循环的结尾并“返回_cout”,并且当它跳回到节点3来完成循环时,它不知何故不保留该值递归。

如何更新代码以保留计算值?

谢谢。

0 个答案:

没有答案