File tree Expand file tree Collapse file tree 5 files changed +139
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal
encode-and-decode-strings Expand file tree Collapse file tree 5 files changed +139
-0
lines changed Original file line number Diff line number Diff line change 1+ func indexOf (slice []int , value int ) int {
2+ for i , v := range slice {
3+ if v == value {
4+ return i
5+ }
6+ }
7+ return - 1
8+ }
9+
10+ func buildTree (preorder []int , inorder []int ) * TreeNode {
11+ if len (preorder ) == 0 || len (inorder ) == 0 {
12+ return nil
13+ }
14+
15+ // Preorder의 처음 값으로 root을 만듬
16+ rootVal := preorder [0 ]
17+ root := & TreeNode {Val : rootVal }
18+
19+ // inorder에서 root의 위치를 찾음
20+ mid := indexOf (inorder , rootVal )
21+
22+ // inorder에서 mid의 왼쪽은 left subtree이고 오른쪽은 right subtree이다.
23+ leftInorder := inorder [:mid ]
24+ rightInorder := inorder [mid + 1 :]
25+
26+ // left preorder를 계산한다.
27+ leftPreorder := preorder [1 : len (leftInorder )+ 1 ]
28+ // right preorder를 계산한다.
29+ rightPreorder := preorder [len (leftInorder )+ 1 :]
30+
31+ // tree 만들기
32+ root .Left = buildTree (leftPreorder , leftInorder )
33+ root .Right = buildTree (rightPreorder , rightInorder )
34+
35+ return root
36+ }
Original file line number Diff line number Diff line change 1+ func countBits (n int ) []int {
2+ var result []int = make ([]int , n + 1 )
3+ var offset int = 1
4+ for i := 1 ; i <= n ; i ++ {
5+ if i == offset * 2 {
6+ offset = offset * 2
7+ }
8+ result [i ] = 1 + result [i - offset ]
9+ }
10+ return result
11+ }
Original file line number Diff line number Diff line change 1+ func dfs (s string , i int , memo map [int ]int ) int {
2+ if i == len (s ) {
3+ return 1
4+ }
5+ if val , found := memo [i ]; found {
6+ return val
7+ }
8+ if s [i ] == '0' {
9+ memo [i ] = 0
10+ return 0
11+ }
12+
13+ // 1자리 숫자로 디코딩
14+ result := dfs (s , i + 1 , memo )
15+
16+ // 2자리 숫자로 디코딩
17+ if i + 1 < len (s ) {
18+ // 10의 자리 숫자 또는 20의 자리 숫자로 디코딩
19+ if (s [i ] == '1' ) || (s [i ] == '2' && s [i + 1 ] >= '1' && s [i + 1 ] <= '6' ) {
20+ result += dfs (s , i + 2 , memo )
21+ }
22+ }
23+ // dp에 저장
24+ memo [i ] = result
25+ return result
26+ }
27+
28+ func numDecodings (s string ) int {
29+ // memo 테이블 만들고 dfs 호출
30+ memo := make (map [int ]int )
31+ return dfs (s , 0 , memo )
32+ }
Original file line number Diff line number Diff line change 1+ type Codec struct {
2+ }
3+
4+ // Encodes a list of strings to a single string.
5+ func (codec * Codec ) Encode (strs []string ) string {
6+ var temp []rune
7+ for _ , v := range strs {
8+ var current_string = []rune (v )
9+ temp = append (temp , rune (len (current_string )))
10+ temp = append (temp , rune ('π' ))
11+ temp = append (temp , current_string ... )
12+ }
13+ return string (temp )
14+ }
15+
16+ // Decodes a single string to a list of strings.
17+ func (codec * Codec ) Decode (strs string ) []string {
18+ var full_string = []rune (strs )
19+ var result []string
20+
21+ var index = 0
22+
23+ for index < len (full_string ) {
24+ var word_start int = int (index )
25+ for full_string [word_start ] != rune ('π' ) {
26+ word_start += 1
27+ }
28+ length := int (full_string [word_start - 1 ])
29+ result = append (result , string (full_string [word_start + 1 :word_start + 1 + length ]))
30+ index = word_start + 1 + length
31+ }
32+ return result
33+ }
Original file line number Diff line number Diff line change 1+ func isAnagram (s string , t string ) bool {
2+
3+ var s_frequency map [rune ]int = make (map [rune ]int )
4+ var t_frequency map [rune ]int = make (map [rune ]int )
5+
6+ for i := 0 ; i < len (s ); i ++ {
7+ s_frequency [rune (s [i ])] += 1
8+ }
9+
10+ for index , key := range t {
11+ t_frequency [key ] += 1
12+ }
13+
14+ for key , value := range s_frequency {
15+ if v , key_exist := t_frequency [key ]; ! key_exist || v != value {
16+ return false
17+ }
18+ }
19+
20+ for key , value := range t_frequency {
21+ if v , key_exist := s_frequency [key ]; ! key_exist || v != value {
22+ return false
23+ }
24+ }
25+
26+ return true
27+ }
You can’t perform that action at this time.
0 commit comments