我最近正在解决一个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来完成循环时,它不知何故不保留该值递归。
如何更新代码以保留计算值?
谢谢。