有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go Java 算法之迷你語法分析器示例詳解

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

迷你語法分析器

給定一個字符串 s 表示一個整數(shù)嵌套列表,實現(xiàn)一個解析它的語法分析器并返回解析的結(jié)果 NestedInteger 。

列表中的每個元素只可能是整數(shù)或整數(shù)嵌套列表

  • 示例 1:

輸入:s = "324",

輸出:324

解釋:你應(yīng)該返回一個 NestedInteger 對象,其中只包含整數(shù)值 324。

  • 示例 2:

輸入:s = "[123,[456,[789]]]",

輸出:[123,[456,[789]]]

解釋:返回一個 NestedInteger 對象包含一個有兩個元素的嵌套列表:

一個 integer 包含值 123

一個包含兩個元素的嵌套列表:

i. 一個 integer 包含值 456

ii. 一個包含一個元素的嵌套列表

a. 一個 integer 包含值 789  

提示:

  • 1 <= s.length <= 5 * 104
  • s 由數(shù)字、方括號 "[]"、負(fù)號 '-' 、逗號 ','組成
  • 用例保證 s 是可解析的 NestedInteger
  • 輸入中的所有值的范圍是 [-106, 106]

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

根據(jù)題意,一個 NestedInteger 實例只能包含下列兩部分之一:1)一個整數(shù);2)一個列表。

列表中的每個元素都是一個 NestedInteger 實例。據(jù)此,NestedInteger 是通過遞歸定義的,因此也可以用遞歸的方式來解析。

注意序列化的String,有2個特殊含義,導(dǎo)致不能用String.split()。否則實現(xiàn)起來會比較困難。

逗號: 表示分割“同層級”的元素

中括號[] : 表示1個List,可以有兄弟節(jié)點Integer。

如果用逗號分割,可能會割裂了[]的List含義。

class Solution {
    int index = 0;
    public NestedInteger deserialize(String s) {
        if (s.charAt(index) == '[') {
            index++;
            NestedInteger ni = new NestedInteger();
            while (s.charAt(index) != ']') {
                ni.add(deserialize(s));
                if (s.charAt(index) == ',') {
                    index++;
                }
            }
            index++;
            return ni;
        } else {
            boolean negative = false;
            if (s.charAt(index) == '-') {
                negative = true;
                index++;
            }
            int num = 0;
            while (index < s.length() && Character.isDigit(s.charAt(index))) {
                num = num * 10 + s.charAt(index) - '0';
                index++;
            }
            if (negative) {
                num *= -1;
            }
            return new NestedInteger(num);
        }
    }
}

時間復(fù)雜度:O(n)

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

方法二:棧(Go)

我們只需關(guān)注字符串s中的[、],字符,其他字符均可轉(zhuǎn)為數(shù)字,初始化棧時,將一個空的NestedInteger加入其中,防止越界。

順序遍歷,3 種情況:

[ :新建列表,入棧

數(shù)字和-:累加字符串

],:字符串加完,加入列表

]出棧,結(jié)果加入上級列表

func deserialize(s string) *NestedInteger {
  if s[0] != '[' {
    integer, _ := strconv.Atoi(s)
    nestedInteger := &NestedInteger{}
    nestedInteger.SetInteger(integer)
    return nestedInteger
  }
  stack, integer := []*NestedInteger{}, ""
  for _, ch := range s {
    switch ch {
      case '[':
        stack = append(stack, &NestedInteger{}) // 入棧
      case ']':
        fallthrough
      case ',':
        if integer != "" {
          int, _ := strconv.Atoi(integer)
          nestedInteger := NestedInteger{}
          nestedInteger.SetInteger(int)
          stack[len(stack) - 1].Add(nestedInteger)
          integer = ""
        }
        if ch == ']' && len(stack) > 1 { // 出棧
          stack[len(stack) - 2].Add(*stack[len(stack) - 1])
          stack = stack[:len(stack) - 1]
        }
      default:
        integer += string(ch)
    }
  }
  return stack[len(stack) - 1]
}

時間復(fù)雜度:O(n)

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

以上就是Go Java 算法之迷你語法分析器示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go Java 算法語法分析器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中String性能優(yōu)化

    Java中String性能優(yōu)化

    本文給大家分享的是如何在java中對String進行性能優(yōu)化,使用String的時候需要有哪些注意事項呢,這就是今天我們要給大家總結(jié)分析的,有需要的小伙伴可以參考下。
    2015-03-03
  • Java中isAssignableFrom的用法詳解

    Java中isAssignableFrom的用法詳解

    下面小編就為大家?guī)硪黄狫ava中isAssignableFrom的用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Spring Boot security 默認(rèn)攔截靜態(tài)資源的解決方法

    Spring Boot security 默認(rèn)攔截靜態(tài)資源的解決方法

    這篇文章主要介紹了Spring Boot security 默認(rèn)攔截靜態(tài)資源,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Kotlin 基礎(chǔ)教程之異常

    Kotlin 基礎(chǔ)教程之異常

    這篇文章主要介紹了Kotlin 基礎(chǔ)教程之異常的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • JavaWeb實現(xiàn)簡單的自動登錄功能

    JavaWeb實現(xiàn)簡單的自動登錄功能

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實現(xiàn)簡單的自動登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Intellij IDEA 2017新特性之Spring Boot相關(guān)特征介紹

    Intellij IDEA 2017新特性之Spring Boot相關(guān)特征介紹

    Intellij IDEA 2017.2.2版本針對Springboot設(shè)置了一些特性,本篇文章給大家簡單介紹一下如何使用這些特性,需要的朋友參考下吧
    2018-01-01
  • JAVA如何調(diào)用wsdl過程詳解

    JAVA如何調(diào)用wsdl過程詳解

    這篇文章主要介紹了JAVA如何調(diào)用wsdl過程詳解,文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 聊聊java中引用數(shù)據(jù)類型有哪些

    聊聊java中引用數(shù)據(jù)類型有哪些

    這篇文章主要介紹了java中引用數(shù)據(jù)類型有哪些,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Fluent Mybatis快速入門詳細(xì)教程

    Fluent Mybatis快速入門詳細(xì)教程

    由于FluentMybatis是基于mybatis上做封裝和擴展的,所以這里主要聊聊mybatis處理的方式,以及給出FluentMybatis的解放方案。對Fluent Mybatis入門相關(guān)知識感興趣的朋友一起看看吧
    2021-08-08
  • SpringBoot靜態(tài)資源映射規(guī)則淺析

    SpringBoot靜態(tài)資源映射規(guī)則淺析

    這篇文章主要介紹了SpringBoot靜態(tài)資源映射規(guī)則,今天在玩SpringBoot的demo的時候,放了張圖片在resources目錄下,啟動區(qū)訪問的時候,突然好奇是識別哪些文件夾來展示靜態(tài)資源的, 為什么有時候放的文件夾不能顯示,有的卻可以
    2023-02-02

最新評論

抚顺县| 邯郸县| 无为县| 辽宁省| 万盛区| 淮阳县| 辽阳县| 双牌县| 河曲县| 鄂尔多斯市| 忻州市| 深圳市| 二连浩特市| 城固县| 巴彦县| 长顺县| 神池县| 贡觉县| 虹口区| 陆川县| 武隆县| 定南县| 嘉义市| 芒康县| 仪征市| 贺州市| 奉贤区| 四会市| 洛阳市| 西乌珠穆沁旗| 凤城市| 茂名市| 康定县| 平安县| 云霄县| 宁海县| 永善县| 慈利县| 同仁县| 乐亭县| 阿合奇县|