LeetCode 690
Employee Importance
- Problem Description:
题目给出一个结构体(id, importance, subordinates),其中,id唯一标识一个人,importance标识该人的重要程度,subordinates表示该人的直接下属(不包括间接下属)。题目给出特定id代表上司的id号,要求返回该上司及其所有下属的importance的和。
具体的题目信息:
https://leetcode.com/problems/employee-importance/description/ - Solution: 采用栈辅助实现深度优先搜索
/*
// 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 {
public:
int getImportance(vector<Employee*> employees, int id) {
int num[2000];
//使用数组标记是否有重复下属
int sum = 0;
memset(num, 0, 2000*sizeof(int));
stack<int> sub;
for (int i = 0; i < employees.size(); i++) {
if (employees[i]->id == id) {
sum += employees[i]->importance;
if (employees[i]->subordinates.size()==0) break;
for (int j = 0; j < employees[i]->subordinates.size(); j++) {
cout << employees[i]->subordinates[j] << endl;
sub.push(employees[i]->subordinates[j]);
}
break;
}
}
int *p = ∑
//这里很重要,子函数若要对父函数进行修改,需要传更高一级的值,比如若要对常数进行修改,要传指针!!!
getAllsubordinates(sub, employees, num, p);
return sum;
}
void getAllsubordinates(stack<int> sub, vector<Employee*> employees, int num[2000], int* p) {
if (sub.empty()) {
return;
} else {
int id = sub.top();
sub.pop();
for (int i = 0; i < employees.size(); i++) {
if (id == employees[i]->id) {
if (num[id] == 0) {
num[id] = 1;
*p += employees[i]->importance;
if (employees[i]->subordinates.size()==0) break;
for (int j = 0; j < employees[i]->subordinates.size(); j++) {
sub.push(employees[i]->subordinates[j]);
}
break;
} else {
break;
}
}
}
getAllsubordinates(sub, employees, num, p);
}
}
};
- Experience
基础知识补一补:关于子函数&父函数传值问题
Reference : https://blog.csdn.net/yudejiao/article/details/53324856
想要在子函数中修改main函数中变量的值,需要传更高一级的变量到子函数。例如,改变普通变量的值,需要传一级指针;改变一级指针的值需要传二级指针等等。