dengxinyi 6 лет назад
Родитель
Сommit
7ee42e792a

+ 46 - 0
easy/501.find-mode-in-binary-search-tree.go

@@ -0,0 +1,46 @@
+var cnt int = 1
+var max int = 0
+var pre int = 0
+var ini bool = false
+
+/**
+ * Definition for a binary tree node.
+ * type TreeNode struct {
+ *     Val int
+ *     Left *TreeNode
+ *     Right *TreeNode
+ * }
+ */
+func findMode(root *TreeNode) (res []int) {
+	cnt, max, pre = 1, 0, 0 // Remember to init global variables at the beginning!
+	ini = false
+	if root == nil {
+		return
+	}
+	inorder(root, &res)
+	return
+}
+
+func inorder(root *TreeNode, res *[]int) {
+	if root == nil {
+		return
+	} // Inorder traversal changes BST into increasing sequence.
+	inorder(root.Left, res)
+	if ini {
+		if root.Val == pre {
+			cnt++
+		} else {
+			cnt = 1
+		}
+	} else {
+		ini = true
+	}
+	if max < cnt {
+		*res = []int{root.Val}
+		max = cnt
+	} else if max == cnt {
+		*res = append(*res, root.Val)
+	}
+	pre = root.Val
+	inorder(root.Right, res)
+}

+ 22 - 0
easy/504.base-7.go

@@ -0,0 +1,22 @@
+func convertToBase7(num int) string {
+	if num == 0 {
+		return "0"
+	}
+	str := make([]rune, 0)
+	isNeg := false
+	if num < 0 {
+		isNeg = true
+		num = -num
+	}
+	for num != 0 {
+		str = append(str, rune(num%7+'0'))
+		num /= 7
+	}
+	for l, r := 0, len(str)-1; l < r; l, r = l+1, r-1 {
+		str[l], str[r] = str[r], str[l]
+	}
+	if isNeg {
+		return "-" + string(str)
+	}
+	return string(str)
+}

+ 26 - 0
easy/506.relative-ranks.go

@@ -0,0 +1,26 @@
+func findRelativeRanks(nums []int) []string {
+	idx2num := make(map[int]int)
+	for i := range nums {
+		idx2num[i] = nums[i]
+	}
+	sort.Sort(sort.Reverse(sort.IntSlice(nums)))
+	num2rank := make(map[int]int)
+	for i := range nums {
+		num2rank[nums[i]] = i
+	}
+	res := make([]string, len(nums))
+	for i := range res {
+		rank := num2rank[idx2num[i]]
+		switch rank {
+		case 0:
+			res[i] = "Gold Medal"
+		case 1:
+			res[i] = "Silver Medal"
+		case 2:
+			res[i] = "Bronze Medal"
+		default:
+			res[i] = strconv.Itoa(rank + 1)
+		}
+	}
+	return res
+}

+ 17 - 0
easy/507.perfect-number.go

@@ -0,0 +1,17 @@
+func checkPerfectNumber(num int) bool {
+	if num <= 1 {
+		return false
+	}
+	sum, sqrt := 1, int(math.Sqrt(float64(num)))
+	if sqrt*sqrt == num {
+		sum += sqrt
+		sqrt--
+	}
+	for i := 2; i <= sqrt; i++ {
+		if num%i == 0 {
+			sum += i
+			sum += num / i
+		}
+	}
+	return sum == num
+}