当前位置 : 主页 > 编程语言 > 其它开发 >

每日一题(2022-5-24):经典搜索算法

来源:互联网 收集:自由互联 发布时间:2022-05-30
题目 给定一个文件目录的路径,统计这个目录下所有的文件数并返回 分析 这道题很容易想到深搜或者广搜,不仅考察了对搜索算法的应用,还考察了对文件的操作,这道题在面试的时
题目

给定一个文件目录的路径,统计这个目录下所有的文件数并返回

分析

这道题很容易想到深搜或者广搜,不仅考察了对搜索算法的应用,还考察了对文件的操作,这道题在面试的时候还是很常见的
直接看代码吧,边看注释边讲。

代码

深度搜素:

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;
  }
网友评论