演算法設計周記(十) 棧

2021-08-14 12:01:03 字數 699 閱讀 4657

給定乙個擁有固定格式的字串n[s],將其解析成ss…s(重複n次)的形式。

這題涉及到符號匹配,可以考慮使用棧這一filo的資料結構來幫助解決問題。因為數字必定表示倍數,不會是轉換後的字串的內容,所以遍歷字串遇到數字時,將其轉換成整數形式存在int棧內;若是讀到字母,將其存入快取字串;「[」符號意味著重複字串的開始,這裡可以將前面已經讀到的內容先存入strnig棧內;「]」符號意味著重複字串的結束,這時從int棧頂pop出其重複次數,執行repeat操作後將其與string棧頂的已讀內容合併到快取字串。順序遍歷過原字串後,依據上述操作進行處理,最後將快取字串返回出來即可。

class solution  else if (s[index] == ']') 

cnt.pop();

index++;

} else if (isdigit(s[index])) else

} return rtn;}};

這道題主要考察棧的操作,想讓**更加優雅的話可以採用遞迴函式的形式,不過本質上並無太大區別就是了。

演算法設計周記(六) Summary Ranges

對於給定的陣列,求出其整數範圍。如果從集合表示的角度來看待問題的話,可以理解成將列舉法轉化為描述法。所給陣列已經做好了公升序排列,那麼只用順序遍歷一次,把每乙個連續的整數串用字串返回即可。class solution else i end 1 return res 這種解法比較常規,時間複雜度為o ...

演算法設計周記(十七) Integer Break

對正整數進行加法意義上的分割,求出其分割結果的最大乘積。我們不妨先考慮,將整數n分割成兩個數的情形。顯然若n為偶數,最大乘積為 n 2 n 2 若n為奇數,最大乘積為 n 1 2 n 1 2。當 n 2 n 2 和 n 1 2 n 1 2大於等於n時,我們才應該對n進行分割,分別列出不等式,解得n ...

演算法設計周記(三) 桶排序

問題需要給一組雜亂無章的0,1,2排序,要求不使用庫函式,並且只使用常量空間。在此基礎上我立即想到的方案是採用桶排序,具體實現如下 public void sortcolors vector nums vector iterator it for it nums.begin it nums.end ...