Hellooo,long time n|

fengzeng

园龄:4年10个月粉丝:17关注:5

每日一题(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 中国大陆许可协议进行许可。

posted @   fengzeng  阅读(81)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起