返回顶部
首页 > 资讯 > 后端开发 > GO >Gojava算法之括号生成示例详解
  • 459
分享到

Gojava算法之括号生成示例详解

2024-04-02 19:04:59 459人浏览 独家记忆
摘要

目录括号生成方法一:深度优先遍历(java)方法一:深度优先遍历(Go)括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组

括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

  • 示例 1:

输入:n = 3

输出:["((()))","(()())","(())()","()(())","()()()"]

  • 示例 2:

输入:n = 1

输出:["()"]  

提示:

1 <= n <= 8

方法一:深度优先遍历(java)

首先我们需要知道一个结论,一个合法的括号序列需要满足两个条件:

1、左右括号数量相等

2、任意前缀中左括号数量 >= 右括号数量 (也就是说每一个右括号总能找到相匹配的左括号)

题目要求我们生成n对的合法括号序列组合,因此可以考虑使用深度优先搜索

将搜索顺序定义为枚举序列的每一位填什么,那么最终的答案一定是由n个左括号和n个右括号组成。

class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList<String>();
        backtrack(ans, new StringBuilder(), 0, 0, n);
        return ans;
    }
    public void backtrack(List<String> ans, StringBuilder cur, int open, int close, int max) {
        if (cur.length() == max * 2) {
            ans.add(cur.toString());
            return;
        }
        if (open < max) {
            cur.append('(');
            backtrack(ans, cur, open + 1, close, max);
            cur.deleteCharAt(cur.length() - 1);
        }
        if (close < open) {
            cur.append(')');
            backtrack(ans, cur, open, close + 1, max);
            cur.deleteCharAt(cur.length() - 1);
        }
    }
}

时间复杂度:o(4^n / n^(1/2))

空间复杂度:o(n)

方法一:深度优先遍历(go)

具体方法分析已在上文中表述

根据题目条件生成一颗树,并对这颗树生枝叶的条件按照题目进行限制。

需要左右括号都大于0个时才可以进行生成树的操作(等于0的特殊情况)

生成树之后生出左节点的条件:左括号的剩余数量大于0

生成树之后生成右节点条件:左括号的剩余数量 小于 右括号的剩余数量

当左右括号都为0时,为成功出口,此时进行结算,保存结果。

	var ans []string
	var backtrack func([]byte, int, int)
	backtrack = func(bytes []byte, left int, right int) {
		if len(bytes) == 2*n {
			ans = append(ans, string(bytes))
			return
		}
		if left < n {
			bytes = append(bytes,'(')
			backtrack(bytes, left+1, right)
			bytes = bytes[:len(bytes)-1]
		}
		if right < left{
			bytes = append(bytes, ')')
			backtrack(bytes, left, right + 1)
			bytes = bytes[:len(bytes)-1]
		}
	}
	var container []byte
	backtrack(container, 0, 0)
	return ans

时间复杂度:o(4^n / n^(1/2))

空间复杂度:o(n)

以上就是Go java 算法之括号生成示例详解的详细内容,更多关于Go java 算法括号生成的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Gojava算法之括号生成示例详解

本文链接: https://lsjlt.com/news/121072.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Gojava算法之括号生成示例详解
    目录括号生成方法一:深度优先遍历(java)方法一:深度优先遍历(go)括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组...
    99+
    2024-04-02
  • GoJava算法之累加数示例详解
    目录累加数方法一:穷举法(java)方法二:深度优先遍历(go)累加数 累加数 是一个字符串,组成它的数字可以形成累加序列。 一个有效的 累加序列 必须 至少 包含 3 个数。除了最...
    99+
    2024-04-02
  • GoJava算法之找不同示例详解
    目录找不同方法一:计数(Java)方法二:求和(Go)找不同 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位...
    99+
    2024-04-02
  • GoJava算法之单词规律示例详解
    目录单词规律方法一:哈希表(Java)方法一:哈希表(GO)单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同...
    99+
    2024-04-02
  • GoJava算法之同构字符串示例详解
    目录同构字符串方法一:哈希表(Java)方法一:哈希表(Go)同构字符串 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 ...
    99+
    2024-04-02
  • GoJava算法之Excel表列名称示例详解
    目录Excel表列名称方法一:数学(Java)方法一:数学(Go)Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 ...
    99+
    2024-04-02
  • GoJava算法之迷你语法分析器示例详解
    目录迷你语法分析器方法一:深度优先遍历(Java)方法二:栈(Go)迷你语法分析器 给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 N...
    99+
    2024-04-02
  • GoJava算法之比较版本号方法详解
    目录比较版本号方法一:字符串切割(Java)方法二:双指针(Go)比较版本号 给你两个版本号 version1 和 version2 ,请你比较它们。 版本号由一个或多个修订号组成,...
    99+
    2022-11-13
    Go Java算法比较版本号 Go Java版本号比较
  • GoJava算法之外观数列实现方法示例详解
    目录外观数列方法一:遍历生成(Java)方法二:递归(Go)外观数列 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都...
    99+
    2022-11-13
    Go Java算法外观数列 Go Java算法
  • GoJava算法之简化路径实例详解
    目录简化路径方法一:栈(Java)方法二:标准库(Go)简化路径 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/'...
    99+
    2024-04-02
  • GoJava算法之二叉树的所有路径示例详解
    目录二叉树的所有路径方法一:深度优先遍历搜索(Java)方法二:广度优先遍历(Go)二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的...
    99+
    2024-04-02
  • GoJava算法之从英文中重建数字示例详解
    目录从英文中重建数字Java实现Go实现从英文中重建数字 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。 示例 1: 输入...
    99+
    2022-11-13
    Go Java算法英文重建数字 Go Java算法
  • GoJava算法最大单词长度乘积示例详解
    目录最大单词长度乘积方法一:位运算(java)方法一:位运算(go)最大单词长度乘积 给你一个字符串数组 words ,找出并返回 length(words[i]) * l...
    99+
    2024-04-02
  • Python异步之生成器示例详解
    目录正文1. 什么是异步生成器1.1. Generators1.2. Asynchronous Generators2. 如何使用异步生成器2.1. 定义2.2. 创建2.3. 一步...
    99+
    2023-03-22
    Python 异步生成器 Python 异步
  • GoJava算法之K个重复字符最长子串详解
    目录至少有K个重复字符的最长子串方法一:分治(Java)方法二:滑动窗口(go)至少有K个重复字符的最长子串 给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串,&nb...
    99+
    2024-04-02
  • 前端Token 组成及生成方法示例详解
    目录正文生成 tokentoken 的组成1. Header2. Payload3. Signature验证 token采用非对称加密算法生成公私密钥修改之前的代码正文 平常前端项目...
    99+
    2023-05-16
    前端Token组成生成 前端Token
  • GoJava算法之字符串中第一个唯一字符详解
    目录字符串中第一个唯一字符方法一:哈希表(Java)方法二:队列(Go)字符串中第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引...
    99+
    2024-04-02
  • 使用redis生成唯一编号及原理示例详解
    在系统开发中,保证数据的唯一性是至关重要的一件事,目前开发中常用的方式有使用数据库的自增序列、UUID生成唯一编号、时间戳或者时间戳+随机数等。 在某些特定业务场景中,可能会要求我们...
    99+
    2024-04-02
  • Go Java 算法之字符串解码示例详解
    目录字符串解码方法一:栈(Java)方法二:递归(Go)字符串解码 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号...
    99+
    2024-04-02
  • Go Java算法之单词搜索示例详解
    目录单词搜索算法:DFS回溯(Java)算法:DFS回溯(Go)单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作