每日一题(2022-5-24):经典搜索算法
题目
给定一个文件目录的路径,统计这个目录下所有的文件数并返回
分析
这道题很容易想到深搜或者广搜,不仅考察了对搜索算法的应用,还考察了对文件的操作,这道题在面试的时候还是很常见的
直接看代码吧,边看注释边讲。
代码
深度搜素:
public static int dfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个栈,把传过来的目录入栈
Stack<File> stack = new Stack<>();
stack.push(root);
int files = 0;
while (!stack.isEmpty()) {
File folder = stack.pop();
// 去遍历目录下的所有文件
for (File file : folder.listFiles()) {
// 如果 file 是目录就入栈,是文件就 files++
if (file.isDirectory()) {
stack.push(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}
广度搜索:
public static int bfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个队列
Deque<File> queue = new LinkedList<>();
queue.add(root);
int files = 0;
// 遍历队列
while (!queue.isEmpty()) {
// 从队头取出一个 folder
File folder = queue.pollFirst();
// 遍历这个 folder 的子目录,是目录就加到队尾,是文件 files++
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
queue.addLast(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}
本文作者:fengzeng
本文链接:https://www.cnblogs.com/Fzeng/p/16306656.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步