欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go java 算法之括號生成示例詳解

 更新時間:2022年08月23日 09:58:42   作者:黃丫丫  
這篇文章主要為大家介紹了Go java 算法之括號生成示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

括號生成

數(shù)字 n 代表生成括號的對數(shù),請你設(shè)計一個函數(shù),用于能夠生成所有可能的并且 有效的 括號組合。

  • 示例 1:

輸入:n = 3

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

  • 示例 2:

輸入:n = 1

輸出:["()"]  

提示:

1 <= n <= 8

方法一:深度優(yōu)先遍歷(java)

首先我們需要知道一個結(jié)論,一個合法的括號序列需要滿足兩個條件:

1、左右括號數(shù)量相等

2、任意前綴中左括號數(shù)量 >= 右括號數(shù)量 (也就是說每一個右括號總能找到相匹配的左括號)

題目要求我們生成n對的合法括號序列組合,因此可以考慮使用深度優(yōu)先搜索

將搜索順序定義為枚舉序列的每一位填什么,那么最終的答案一定是由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);
        }
    }
}

時間復(fù)雜度:o(4^n / n^(1/2))

空間復(fù)雜度:o(n)

方法一:深度優(yōu)先遍歷(go)

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

根據(jù)題目條件生成一顆樹,并對這顆樹生枝葉的條件按照題目進行限制。

需要左右括號都大于0個時才可以進行生成樹的操作(等于0的特殊情況)

生成樹之后生出左節(jié)點的條件:左括號的剩余數(shù)量大于0

生成樹之后生成右節(jié)點條件:左括號的剩余數(shù)量 小于 右括號的剩余數(shù)量

當左右括號都為0時,為成功出口,此時進行結(jié)算,保存結(jié)果。

	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

時間復(fù)雜度:o(4^n / n^(1/2))

空間復(fù)雜度:o(n)

以上就是Go java 算法之括號生成示例詳解的詳細內(nèi)容,更多關(guān)于Go java 算法括號生成的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go和Java算法詳析之分數(shù)到小數(shù)

    Go和Java算法詳析之分數(shù)到小數(shù)

    這篇文章主要給大家介紹了關(guān)于Go和Java算法詳析之分數(shù)到小數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-08-08
  • Golang微服務(wù)框架Kratos實現(xiàn)Kafka消息隊列的方法

    Golang微服務(wù)框架Kratos實現(xiàn)Kafka消息隊列的方法

    消息隊列是大型分布式系統(tǒng)不可缺少的中間件,也是高并發(fā)系統(tǒng)的基石中間件,所以掌握好消息隊列MQ就變得極其重要,在本文當中,您將了解到:什么是消息隊列?什么是Kafka?怎樣在微服務(wù)框架Kratos當中應(yīng)用Kafka進行業(yè)務(wù)開發(fā),需要的朋友可以參考下
    2023-09-09
  • Go語言中更優(yōu)雅的錯誤處理

    Go語言中更優(yōu)雅的錯誤處理

    Go語言中的錯誤處理是一個被大家經(jīng)常拿出來討論的話題(另外一個是泛型)。篇文章我們將討論一下如何在現(xiàn)行的 Golang 框架下提供更友好和優(yōu)雅的錯誤處理。需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射

    Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射

    這篇文章主要為大家介紹了Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言中如何實現(xiàn)并發(fā)

    Go語言中如何實現(xiàn)并發(fā)

    Go的并發(fā)機制通過協(xié)程和通道的簡單性和高效性,使得編寫并發(fā)代碼變得相對容易,這種并發(fā)模型被廣泛用于構(gòu)建高性能的網(wǎng)絡(luò)服務(wù)、并行處理任務(wù)和其他需要有效利用多核處理器的應(yīng)用程序,這篇文章主要介紹了在Go中如何實現(xiàn)并發(fā),需要的朋友可以參考下
    2023-09-09
  • Golang并發(fā)編程之GMP模型詳解

    Golang并發(fā)編程之GMP模型詳解

    傳統(tǒng)的并發(fā)編程模型是基于線程和共享內(nèi)存的同步訪問控制的,共享數(shù)據(jù)受鎖的保護,線程將爭奪這些鎖以訪問數(shù)據(jù)。本文將介紹Go并發(fā)編程中的GMP模型,感興趣的可以了解一下
    2023-03-03
  • Go處理json數(shù)據(jù)方法詳解(Marshal,UnMarshal)

    Go處理json數(shù)據(jù)方法詳解(Marshal,UnMarshal)

    這篇文章主要介紹了Go處理json數(shù)據(jù)的方法詳解,Marshal(),UnMarshal(),需要的朋友可以參考下
    2022-04-04
  • Gin框架中參數(shù)校驗優(yōu)化詳解

    Gin框架中參數(shù)校驗優(yōu)化詳解

    這篇文章主要為大家詳細介紹了Gin框架中參數(shù)校驗優(yōu)化的相關(guān)知識,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2023-08-08
  • go?defer延遲調(diào)用的使用場景示例詳解

    go?defer延遲調(diào)用的使用場景示例詳解

    這篇文章主要為大家介紹了go?defer延遲調(diào)用的使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Go語言排序算法:快速、可靠的排序解決方案

    Go語言排序算法:快速、可靠的排序解決方案

    Go語言提供了多種快速、可靠的排序算法,可以滿足不同場景下的排序需求,其中最常用的排序算法包括快速排序、歸并排序和堆排序,需要的朋友可以參考下
    2023-10-10

最新評論