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