文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

LeetCode中Java路径问题的解决方案是什么?

2023-09-20 23:32

关注

LeetCode是一个著名的面试题库和算法题库,主要提供各种编程语言的算法题目,其中Java是其中一个主要支持的编程语言。在LeetCode中,路径问题是一个非常常见的问题,包括二叉树路径、图的路径、字符串路径等等,而这些问题的解决方案也非常重要。

Java是一种面向对象的编程语言,它具有高效、灵活、可靠的特点。Java在LeetCode中的应用也非常广泛,尤其是在路径问题的解决方案中,Java的高效和灵活性得到了广泛的应用。

一、二叉树路径问题的解决方案

二叉树路径问题是LeetCode中最常见的问题之一,而Java的解决方案也是非常简单和高效的。以下是Java中二叉树路径问题的解决方案:

  1. 递归

递归是二叉树路径问题中最常用的解决方案之一。通过递归,可以轻松地遍历整个二叉树,同时将所有路径保存到一个列表中。

以下是Java中二叉树路径问题的递归解决方案:

public List<String> binaryTreePaths(TreeNode root) {
    List<String> paths = new ArrayList<>();
    if (root != null) {
        getPath(root, "", paths);
    }
    return paths;
}

private void getPath(TreeNode node, String path, List<String> paths) {
    if (node.left == null && node.right == null) {
        paths.add(path + node.val);
        return;
    }
    if (node.left != null) {
        getPath(node.left, path + node.val + "->", paths);
    }
    if (node.right != null) {
        getPath(node.right, path + node.val + "->", paths);
    }
}
  1. 迭代

迭代是另一个常用的解决方案。通过迭代,可以轻松地遍历整个二叉树,同时将所有路径保存到一个列表中。

以下是Java中二叉树路径问题的迭代解决方案:

public List<String> binaryTreePaths(TreeNode root) {
    List<String> paths = new ArrayList<>();
    if (root == null) {
        return paths;
    }
    Stack<TreeNode> node_stack = new Stack<>();
    Stack<String> path_stack = new Stack<>();
    node_stack.push(root);
    path_stack.push(Integer.toString(root.val));
    while (!node_stack.isEmpty()) {
        TreeNode node = node_stack.pop();
        String path = path_stack.pop();
        if (node.left == null && node.right == null) {
            paths.add(path);
        }
        if (node.left != null) {
            node_stack.push(node.left);
            path_stack.push(path + "->" + Integer.toString(node.left.val));
        }
        if (node.right != null) {
            node_stack.push(node.right);
            path_stack.push(path + "->" + Integer.toString(node.right.val));
        }
    }
    return paths;
}

二、图的路径问题的解决方案

图的路径问题是LeetCode中另一个常见的问题之一,而Java的解决方案也非常简单和高效。以下是Java中图的路径问题的解决方案:

  1. 深度优先搜索

深度优先搜索是图的路径问题中最常用的解决方案之一。通过深度优先搜索,可以轻松地遍历整个图,同时将所有路径保存到一个列表中。

以下是Java中图的路径问题的深度优先搜索解决方案:

public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
    List<List<Integer>> paths = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    path.add(0);
    dfs(graph, 0, paths, path);
    return paths;
}

private void dfs(int[][] graph, int node, List<List<Integer>> paths, List<Integer> path) {
    if (node == graph.length - 1) {
        paths.add(new ArrayList<>(path));
        return;
    }
    for (int next_node : graph[node]) {
        path.add(next_node);
        dfs(graph, next_node, paths, path);
        path.remove(path.size() - 1);
    }
}
  1. 广度优先搜索

广度优先搜索是另一个常用的解决方案。通过广度优先搜索,可以轻松地遍历整个图,同时将所有路径保存到一个列表中。

以下是Java中图的路径问题的广度优先搜索解决方案:

public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
    List<List<Integer>> paths = new ArrayList<>();
    Queue<List<Integer>> queue = new LinkedList<>();
    List<Integer> path = new ArrayList<>();
    path.add(0);
    queue.add(path);
    while (!queue.isEmpty()) {
        List<Integer> curr_path = queue.poll();
        int curr_node = curr_path.get(curr_path.size() - 1);
        if (curr_node == graph.length - 1) {
            paths.add(curr_path);
        }
        for (int next_node : graph[curr_node]) {
            List<Integer> next_path = new ArrayList<>(curr_path);
            next_path.add(next_node);
            queue.add(next_path);
        }
    }
    return paths;
}

三、字符串路径问题的解决方案

字符串路径问题是LeetCode中另一个常见的问题之一,而Java的解决方案也非常简单和高效。以下是Java中字符串路径问题的解决方案:

  1. 回溯法

回溯法是字符串路径问题中最常用的解决方案之一。通过回溯法,可以轻松地遍历整个字符串,同时将所有路径保存到一个列表中。

以下是Java中字符串路径问题的回溯法解决方案:

public List<String> restoreIpAddresses(String s) {
    List<String> paths = new ArrayList<>();
    if (s.length() < 4 || s.length() > 12) {
        return paths;
    }
    dfs(s, 0, new ArrayList<>(), paths);
    return paths;
}

private void dfs(String s, int index, List<String> path, List<String> paths) {
    if (index == s.length() && path.size() == 4) {
        paths.add(String.join(".", path));
        return;
    }
    if (index >= s.length() || path.size() >= 4) {
        return;
    }
    for (int i = 1; i <= 3 && index + i <= s.length(); i++) {
        String part = s.substring(index, index + i);
        if (part.startsWith("0") && part.length() > 1 || Integer.parseInt(part) > 255) {
            continue;
        }
        path.add(part);
        dfs(s, index + i, path, paths);
        path.remove(path.size() - 1);
    }
}
  1. 动态规划

动态规划是另一个常用的解决方案。通过动态规划,可以轻松地遍历整个字符串,同时将所有路径保存到一个列表中。

以下是Java中字符串路径问题的动态规划解决方案:

public List<String> restoreIpAddresses(String s) {
    List<String> paths = new ArrayList<>();
    if (s.length() < 4 || s.length() > 12) {
        return paths;
    }
    int n = s.length();
    String[][] dp = new String[n + 1][5];
    dp[0][0] = "";
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= 3 && j <= i; j++) {
            String part = s.substring(i - j, i);
            if (part.startsWith("0") && part.length() > 1 || Integer.parseInt(part) > 255) {
                continue;
            }
            for (int k = 1; k <= 4; k++) {
                if (dp[i - j][k - 1] != null) {
                    dp[i][k] = dp[i - j][k - 1] + "." + part;
                }
            }
        }
    }
    for (String path : dp[n]) {
        if (path != null) {
            paths.add(path);
        }
    }
    return paths;
}

总结:

Java在LeetCode中路径问题的解决方案非常丰富,包括递归、迭代、深度优先搜索、广度优先搜索、回溯法、动态规划等。通过这些解决方案,可以轻松地解决各种路径问题,提高算法编程的效率和质量。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯