高德笔试 高德笔试题 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多种语言版本,持续更新中。