Re: [閒聊] 每日leetcode

作者: JIWP (JIWP)   2024-07-15 00:14:46
726. Number of Atoms
給一串字串formula代表一個化學公式
每個原子都是大寫開頭的
原子後面會接它的個數 EX:H2
或是有括號 EX: (H2Mg3)2
接的數字會大於1
請根據formula回傳每個原子的數量
用字串來表示
格式為:原子1數量原子2數量....
並且按照字母來排序
思路:
從formula最後一個元素開始處理到第一個元素
mul紀錄括號後面的數字 EX:(HO)2 這個2
並用stack來記錄mul
atomnum來記錄原子的數目 EX:H2 這個2
建立一個hash table紀錄每個元素出現的次數
接著會分4種情況
(1) ')' : 直接略過
(2) '1'~'9' :
一直找到非數字出現,並記錄這個數字:num
接著看下一個元素是不是')'
是的話mul*num,並且記錄到stack
不是的話那就表示遇到原子了
就把atomnum=num
(3) '(' :
如果stack裡有東西,把stack的最後一個數字pop出來,並且mul/=該數字
(4) 英文字母:
一直處理到大寫出來,可以得到原子的名字
原子的數量=mul*atomnum,加到hash table裡面
並把atomnum=1
最後就按照字母順序去排列
就可以得到答案了
golang code:
type Atom struct {
name string
num int
}
func countOfAtoms(formula string) string {
stack := make([]int, 0)
i, mul, AtomNum := len(formula)-1, 1, 1
rec := make(map[string]int)
atom := []Atom{}
var res strings.Builder
for i > -1 {
if formula[i] >= '0' && formula[i] <= '9' {
tmp := i
for formula[tmp] >= '0' && formula[tmp] <= '9' {
tmp
作者: oin1104 (是oin的說)   2024-07-15 01:18:00
大師

Links booklink

Contact Us: admin [ a t ] ucptt.com