高德笔试 高德笔试题 0321
笔试时间:2024年03月21日
历史笔试传送门:2023秋招笔试合集
第一题
题目
给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。
输入
root =[5,4,8,11,null,13,4,7,2,null,null,5,1]
targetSum = 22
输出
[[5,4,11,2],[5,8,4,5]]
说明
树中节点总数在范围[0,5000]内 -1000<= Node.val<= 1000 -1000 <= targetSum <= 1000。
参考题解
二叉树路径和问题。先使用深度优先搜索(DFS)的方式遍历二叉树,如果当前节点是叶子节点,且目标和为 0,则说明找到了一条路径。找到所有路径和等于给定目标和的路径,并将其存储在二维向量ret 中返回。
C++:[此代码未进行大量数据的测试,仅供参考]
class Solution {
public:
vector<vector<int>> ret;
vector<int> path;
void dfs(TreeNode* root, int targetSum) {
if (root == nullptr) {
return;
}
path.emplace_back(root->val);
targetSum -= root->val;
if (root->left == nullptr && root->right == nullptr && targetSum == 0) {
ret.emplace_back(path);
}
dfs(root->left, targetSum);
dfs(root->right, targetSum);
path.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
dfs(root, targetSum);
return ret;
}
};
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.ArrayList;
import java.util.List;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
List<List<Integer>> ret = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public void dfs(TreeNode root, int targetSum) {
if (root == null) {
return;
}
path.add(root.val);
targetSum -= root.val;
if (root.left == null && root.right == null && targetSum == 0) {
ret.add(new ArrayList<>(path));
}
dfs(root.left, targetSum);
dfs(root.right, targetSum);
path.remove(path.size() - 1);
}
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
dfs(root, targetSum);
return ret;
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def __init__(self):
self.ret = []
self.path = []
def dfs(self, root, targetSum):
if not root:
return
self.path.append(root.val)
targetSum -= root.val
if not root.left and not root.right and targetSum == 0:
self.ret.append(self.path[:])
self.dfs(root.left, targetSum)
self.dfs(root.right, targetSum)
self.path.pop()
def pathSum(self, root, targetSum):
self.dfs(root, targetSum)
return self.ret
第二题
题目
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。
输入
strs =["flower" ,"flow" ,"flight"]
输出
"fl”
说明
1 <= strs.length <= 200
0<= strs[i].length <= 200
strs[i]仅由小写英文字母组成
输入
["flower" ,"flow" ,"flight"]
输出
"fl"
参考题解
最长公共前缀。可以从第一个字符串开始,逐个字符地与其他字符串的相同位置进行比较,如果在某一位置出现不匹配或者字符串长度超过第一个字符串,就返回前面已匹配的部分
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。
查看10道真题和解析