diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..4aa91ea
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/algorithm023.iml b/.idea/algorithm023.iml
new file mode 100644
index 0000000..338a266
--- /dev/null
+++ b/.idea/algorithm023.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..ef004d1
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..7bf78ea
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..9661ac7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/Week_01/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" "b/Week_01/1.\344\270\244\346\225\260\344\271\213\345\222\214.go"
new file mode 100644
index 0000000..9c7a7e7
--- /dev/null
+++ "b/Week_01/1.\344\270\244\346\225\260\344\271\213\345\222\214.go"
@@ -0,0 +1,21 @@
+package week01
+/*
+ * @lc app=leetcode.cn id=1 lang=golang
+ *
+ * [1] 两数之和
+ */
+
+// @lc code=start
+func twoSum(nums []int, target int) []int {
+ hash:= map[int]int{}
+ for i,num:=range nums{
+ if v,ok:=hash[target-num];ok{
+ return []int{v,i}
+ }
+ hash[num] = i
+ }
+ return nil
+
+}
+// @lc code=end
+
diff --git "a/Week_01/283.\347\247\273\345\212\250\351\233\266.go" "b/Week_01/283.\347\247\273\345\212\250\351\233\266.go"
new file mode 100644
index 0000000..2dd0ad7
--- /dev/null
+++ "b/Week_01/283.\347\247\273\345\212\250\351\233\266.go"
@@ -0,0 +1,37 @@
+/*
+ * @lc app=leetcode.cn id=283 lang=golang
+ *
+ * [283] 移动零
+ */
+package week01
+// @lc code=start
+func moveZeroes(nums []int) {
+ a := 0
+ for _,item:=range nums{
+ if item != 0{
+ nums[a] = item
+ a++
+ }
+ }
+
+ for i:=a;i 0 {
+ for root != nil {
+ res = append(res, root.Val)
+ if len(root.Children) == 0 {
+ break
+ }
+ for i:=len(root.Children)-1;i>0;i--{
+ stack = append(stack,root.Children[i])
+ }
+ root = root.Children[0]
+ }
+ root = stack[len(stack)-1]
+ stack = stack[:len(stack)-1]
+ }
+ return res
+}
+
+// 迭代
+var res []int
+func preorder2(root *Node) []int {
+ res = []int{}
+ dfs(root)
+ return res
+}
+func dfs(root *Node) {
+ if root != nil {
+ res = append(res, root.Val)
+ for _,n := range root.Children {
+ dfs(n)
+ }
+ }
+}
+
diff --git "a/Week_02/N\345\217\211\346\240\221\347\232\204\345\261\202\345\272\217\346\216\222\345\210\227.go" "b/Week_02/N\345\217\211\346\240\221\347\232\204\345\261\202\345\272\217\346\216\222\345\210\227.go"
new file mode 100644
index 0000000..e63a560
--- /dev/null
+++ "b/Week_02/N\345\217\211\346\240\221\347\232\204\345\261\202\345\272\217\346\216\222\345\210\227.go"
@@ -0,0 +1,32 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/10
+ @note:
+**/
+package Week_02
+
+// bfs
+func levelOrder(root *Node) [][]int {
+ var res [][]int
+ res = [][]int{}
+ if root == nil {
+ return res
+ }
+ queue := []*Node{root}
+ var level int
+ for 0 < len(queue) {
+ counter := len(queue)
+ res = append(res,[]int{})
+ for i := 0; i < counter; i++ {
+ if queue[i] != nil {
+ res[level] = append(res[level], queue[i].Val)
+ for _, n := range queue[i].Children {
+ queue = append(queue, n)
+ }
+ }
+ }
+ queue = queue[counter:]
+ level++
+ }
+ return res
+}
diff --git a/Week_02/README.md b/Week_02/README.md
index 50de304..e293312 100644
--- a/Week_02/README.md
+++ b/Week_02/README.md
@@ -1 +1,3 @@
-学习笔记
\ No newline at end of file
+学习笔记
+这次的课后作业题目比较多,有些题目做的遍数太少了,后续还有“五毒神掌”的方法继续过遍数,做到熟记于心。
+虽然自己之前不管是学习中还是在工作中,都很少接触到数据结构和算法相关内容,但是经过这两周的学习,有种焕然一新的感觉,并且十分感兴趣。
\ No newline at end of file
diff --git a/Week_02/test.go b/Week_02/test.go
new file mode 100644
index 0000000..1bc24a2
--- /dev/null
+++ b/Week_02/test.go
@@ -0,0 +1,43 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/12
+ @note:
+**/
+package Week_02
+
+import "sort"
+
+//paixu
+func repeategroupAnagrams(strs []string) [][]string {
+ hash := map[string][]string{}
+ for _,str:=range strs{
+ s := []byte(str)
+ sort.Slice(s, func(i, j int) bool {
+ return s[i] b {
+ return b
+ }
+ return a
+ }
+ for i := 1; i < n; i++ {
+ t1, t2, t3 := dp[a]*2, dp[b]*3, dp[c]*5
+ dp[i] = min(min(t1, t2), t3)
+ if dp[i] == t1 {
+ a++
+ }
+ if dp[i] == t2 {
+ b++
+ }
+ if dp[i] == t3 {
+ c++
+ }
+ }
+ return dp[n-1]
+}
diff --git "a/Week_02/\344\270\244\346\225\260\344\271\213\345\222\214.go" "b/Week_02/\344\270\244\346\225\260\344\271\213\345\222\214.go"
new file mode 100644
index 0000000..ec791aa
--- /dev/null
+++ "b/Week_02/\344\270\244\346\225\260\344\271\213\345\222\214.go"
@@ -0,0 +1,29 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/10
+ @note:
+**/
+package Week_02
+
+// 暴力求解
+func twoSum(nums []int, target int) []int {
+ for i:=0;i 0 {
+ for root != nil {
+ stack = append(stack, root)
+ root = root.Left
+ }
+ root = stack[len(stack)-1]
+ stack = stack[:len(stack)-1]
+ res = append(res, root.Val)
+ root = root.Right
+ }
+ return
+
+}
\ No newline at end of file
diff --git "a/Week_02/\344\272\214\345\217\211\346\240\221\347\232\204\345\211\215\345\272\217\351\201\215\345\216\206.go" "b/Week_02/\344\272\214\345\217\211\346\240\221\347\232\204\345\211\215\345\272\217\351\201\215\345\216\206.go"
new file mode 100644
index 0000000..51d5049
--- /dev/null
+++ "b/Week_02/\344\272\214\345\217\211\346\240\221\347\232\204\345\211\215\345\272\217\351\201\215\345\216\206.go"
@@ -0,0 +1,38 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/10
+ @note:
+**/
+package Week_02
+
+//递归
+func preorderTraversal(root *TreeNode) (vals []int) {
+ var preorder func(*TreeNode)
+ preorder = func(node *TreeNode) {
+ if node == nil {
+ return
+ }
+ vals = append(vals, node.Val)
+ preorder(node.Left)
+ preorder(node.Right)
+ }
+ preorder(root)
+ return
+}
+
+//迭代
+func preorderTraversal2(root *TreeNode) (vals []int) {
+ stack := []*TreeNode{}
+ node := root
+ for node != nil || len(stack) > 0 {
+ for node != nil {
+ vals = append(vals, node.Val)
+ stack = append(stack, node)
+ node = node.Left
+ }
+ node = stack[len(stack)-1].Right
+ stack = stack[:len(stack)-1]
+ }
+ return
+}
+
diff --git "a/Week_02/\345\211\215K\344\270\252\351\253\230\351\242\221\345\205\203\347\264\240.go" "b/Week_02/\345\211\215K\344\270\252\351\253\230\351\242\221\345\205\203\347\264\240.go"
new file mode 100644
index 0000000..14525ae
--- /dev/null
+++ "b/Week_02/\345\211\215K\344\270\252\351\253\230\351\242\221\345\205\203\347\264\240.go"
@@ -0,0 +1,40 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/10
+ @note:
+**/
+package Week_02
+
+import "container/heap"
+
+//堆
+
+func topKFrequent(nums []int, k int) []int {
+ occurrences := map[int]int{}
+ for _, num := range nums {
+ occurrences[num]++
+ }
+ h := &IHeap{}
+ heap.Init(h)
+ for key, value := range occurrences {
+ heap.Push(h, [2]int{key, value})
+ if h.Len() > k {
+ heap.Pop(h)
+ }
+ }
+ ret := make([]int, k)
+ for i := 0; i < k; i++ {
+ ret[k - i - 1] = heap.Pop(h).([2]int)[0]
+ }
+ return ret
+}
+
+type IHeap [][2]int
+
+func (h IHeap) Len() int { return len(h) }
+func (h IHeap) Less(i, j int) bool { return h[i][1] < h[j][1] }
+func (h IHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
+
+func (h *IHeap) Push(x interface{}) {
+ *h = append(*h, x.([2]int))
+}
diff --git "a/Week_02/\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215\345\210\206\347\273\204.go" "b/Week_02/\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215\345\210\206\347\273\204.go"
new file mode 100644
index 0000000..91d09ef
--- /dev/null
+++ "b/Week_02/\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215\345\210\206\347\273\204.go"
@@ -0,0 +1,44 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/10
+ @note:
+**/
+package Week_02
+
+import "sort"
+
+//排序
+func groupAnagrams(strs []string) [][]string {
+ mp := map[string][]string{}
+ for _, str := range strs {
+ s := []byte(str)
+ sort.Slice(s, func(i, j int) bool {
+ return s[i] < s[j]
+ })
+ sortedStr := string(s)
+ mp[sortedStr] = append(mp[sortedStr],str)
+ }
+ ans:=[][]string{}
+ for _, v := range mp {
+ ans = append(ans, v)
+ }
+ return ans
+}
+
+//计数
+func groupAnagrams2(strs []string) [][]string {
+ mp := map[[26]int][]string{}
+ for _,str:=range strs{
+ cnt := [26]int{}
+ for _,b:=range str{
+ cnt[b-'a']++
+ }
+ mp[cnt] = append(mp[cnt],str)
+ }
+ ans:=[][]string{}
+ for _, v := range mp {
+ ans = append(ans, v)
+ }
+ return ans
+
+}
\ No newline at end of file
diff --git "a/Week_02/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.go" "b/Week_02/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.go"
new file mode 100644
index 0000000..0aef2fb
--- /dev/null
+++ "b/Week_02/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.go"
@@ -0,0 +1,62 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/10
+ @note:
+**/
+package Week_02
+
+import "sort"
+
+// hash
+func isAnagram(s string, t string) bool {
+ if len(s) != len(t) {
+ return false
+ }
+ hash := map[string]int{}
+ for i := 0; i < len(s); i++ {
+ ch := string(s[i])
+ if _, ok := hash[ch]; ok {
+ hash[ch]++
+ } else {
+ hash[ch] = 1
+ }
+ }
+ for j := 0; j < len(t); j++ {
+ ch := string(t[j])
+ if _, ok := hash[ch]; ok {
+ hash[ch]--
+ if hash[ch] < 0 {
+ return false
+ }
+ } else {
+ return false
+ }
+ }
+ return true
+}
+
+// 方法二 排序
+func isAnagram2(s, t string) bool {
+ s1, s2 := []byte(s), []byte(t)
+ sort.Slice(s1, func(i, j int) bool { return s1[i] < s1[j] })
+ sort.Slice(s2, func(i, j int) bool { return s2[i] < s2[j] })
+ return string(s1) == string(s2)
+}
+
+
+func isAnagram3(s, t string) bool {
+ var alphabet [26]int
+ for _,item:=range s{
+ alphabet[item-'a']++
+ }
+ for _,item:=range t{
+ alphabet[item-'a']--
+ }
+ for _,item:=range alphabet{
+ if item!=0{
+ return false
+ }
+ }
+ return true
+}
+
diff --git a/Week_03/README.md b/Week_03/README.md
index 50de304..a141baa 100644
--- a/Week_03/README.md
+++ b/Week_03/README.md
@@ -1 +1,2 @@
-学习笔记
\ No newline at end of file
+学习笔记
+这周主要的难点就在于递归,之前在工作中很少用到,所以现在刚碰到还是有很多疑问,希望后续通过不断的加强学习,能熟练掌握递归。
\ No newline at end of file
diff --git "a/Week_03/\344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.go" "b/Week_03/\344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.go"
new file mode 100644
index 0000000..6a33457
--- /dev/null
+++ "b/Week_03/\344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.go"
@@ -0,0 +1,30 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/17
+ @note:
+**/
+package Week_03
+
+//type TreeNode struct {
+// Val int
+// Left *TreeNode
+// Right *TreeNode
+//}
+
+func LowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
+ if root == nil {
+ return nil
+ }
+ if root.Val == p.Val || root.Val == q.Val {
+ return root
+ }
+ left := LowestCommonAncestor(root.Left, p, q)
+ right := LowestCommonAncestor(root.Right, p, q)
+ if left != nil && right != nil {
+ return root
+ }
+ if left == nil {
+ return right
+ }
+ return left
+}
diff --git "a/Week_03/\345\205\250\346\216\222\345\210\227.go" "b/Week_03/\345\205\250\346\216\222\345\210\227.go"
new file mode 100644
index 0000000..8f37d33
--- /dev/null
+++ "b/Week_03/\345\205\250\346\216\222\345\210\227.go"
@@ -0,0 +1,35 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/17
+ @note:
+**/
+package Week_03
+
+//dfs
+func Permute(nums []int) [][]int {
+ //append 应该要好好去学学
+ var res [][]int
+ var path []int
+ var dfs func(depth int,used []bool,path []int)
+ dfs = func(depth int, used []bool, path []int) {
+ if len(nums) == depth{
+ var temp []int
+ temp = append(temp,path...)
+ res = append(res, temp)
+ return
+ }
+ for i:=0;i 0 && nums[i] == nums[i-1] && used[i-1] == false) {
+ continue
+ }
+ used[i] = true
+ path = append(path, nums[i])
+ dfs(depth+1, used, path)
+ used[i] = false
+ path = path[:len(path)-1]
+
+ }
+ }
+ dfs(0, make([]bool, len(nums)), path)
+ return res
+
+}
diff --git "a/Week_03/\346\213\254\345\217\267\347\224\237\346\210\220.go" "b/Week_03/\346\213\254\345\217\267\347\224\237\346\210\220.go"
new file mode 100644
index 0000000..1a102d6
--- /dev/null
+++ "b/Week_03/\346\213\254\345\217\267\347\224\237\346\210\220.go"
@@ -0,0 +1,67 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/15
+ @note:
+**/
+package Week_03
+
+func GenerateParenthesis(n int) []string {
+ res := []string{}
+ generatePar(0, 0, n, "", &res)
+ return res
+}
+
+// APPEND的一个大坑 切片不一定是原引用 可以用*来解决
+func generatePar(left, right, n int, s string, ss *[]string) {
+ //terminator
+ if left == n && right == n {
+ *ss = append(*ss, s)
+ return
+ }
+ if left < n {
+ //drill down
+ generatePar(left+1, right, n, s+"(", ss)
+ }
+ if right < left {
+ //drill down
+ generatePar(left, right+1, n, s+")", ss)
+ }
+ //reverse state
+}
+
+var res []string
+func GenerateParenthesis2(n int) []string {
+ generatePar2(0, 0, n, "")
+ return res
+}
+func generatePar2(left, right, n int, s string) {
+ if left == n && right == n {
+ res = append(res, s)
+ return
+ }
+ if left < n {
+ generatePar2(left+1, right, n, s+"(")
+ }
+ if right < left {
+ generatePar2(left, right+1, n, s+")")
+ }
+}
+
+func GenerateParenthesis3(n int) []string {
+ res := []string{}
+ var dfs func(left, right, n int, s string)
+ dfs = func(left, right, n int, s string){
+ if left == n && right == n {
+ res = append(res, s)
+ return
+ }
+ if left < n {
+ dfs(left+1, right, n, s+"(")
+ }
+ if right < left {
+ dfs(left, right+1, n, s+")")
+ }
+ }
+ dfs(0, 0, n, "")
+ return res
+}
diff --git "a/Week_03/\347\210\254\346\245\274\346\242\257.go" "b/Week_03/\347\210\254\346\245\274\346\242\257.go"
new file mode 100644
index 0000000..073fb18
--- /dev/null
+++ "b/Week_03/\347\210\254\346\245\274\346\242\257.go"
@@ -0,0 +1,44 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/15
+ @note:
+**/
+package Week_03
+
+//动态规划
+func climbStairs(n int) int {
+ dp := make([]int, n+1)
+ dp[0] = 1
+ dp[1] = 1
+ for i := 2; i <= n; i++ {
+ dp[i] = dp[i-1] + dp[i-2]
+ }
+ return dp[n]
+}
+// 动态规划优化(节约内存)
+func climbStairs2(n int) int {
+ p:=0;q:=0;r:=1
+ for i := 0; i < n; i++ {
+ p = q
+ q = r
+ r = p+q
+ }
+ return r
+}
+// 递归
+func climbStairs3(n int) int {
+ if n < 3{
+ return n
+ }
+ return climbStairs3(n-1)+climbStairs3(n-2)
+}
+// 递归转尾递归
+func climbStairs4(n int) int {
+ return Fibonacci(n, 1, 1)
+}
+func Fibonacci (n,a,b int)int {
+ if n <= 1 {
+ return b
+ }
+ return Fibonacci(n - 1, b, a + b)
+}
\ No newline at end of file
diff --git "a/Week_03/\347\273\204\345\220\210.go" "b/Week_03/\347\273\204\345\220\210.go"
new file mode 100644
index 0000000..80af1b9
--- /dev/null
+++ "b/Week_03/\347\273\204\345\220\210.go"
@@ -0,0 +1,29 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/17
+ @note:
+**/
+package Week_03
+
+func Combine(n int, k int) [][]int {
+
+ if n < 0 || k > n {
+ return nil
+ }
+
+ var res [][]int
+ var dfs func(n, k, begin int, path []int)
+ dfs = func(n, k, begin int, path []int) {
+ if len(path) == k {
+ res = append(res, append([]int{}, path...))
+ return
+ }
+ for i := begin; i <= n; i++ {
+ path = append(path, i)
+ dfs(n, k, i+1, path)
+ path = path[:len(path)-1]
+ }
+ }
+ dfs(n,k,1,[]int{})
+ return res
+}
diff --git "a/Week_03/\347\277\273\350\275\254\344\272\214\345\217\211\346\240\221.go" "b/Week_03/\347\277\273\350\275\254\344\272\214\345\217\211\346\240\221.go"
new file mode 100644
index 0000000..83141a8
--- /dev/null
+++ "b/Week_03/\347\277\273\350\275\254\344\272\214\345\217\211\346\240\221.go"
@@ -0,0 +1,56 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/15
+ @note:
+**/
+package Week_03
+
+type TreeNode struct {
+ Val int
+ Left *TreeNode
+ Right *TreeNode
+}
+
+
+//dfs
+func InvertTree(root *TreeNode) *TreeNode {
+ //terminator
+ if root == nil{
+ return nil
+ }
+ //process logic
+ temp := root.Left
+ root.Left = root.Right
+ root.Right = temp
+ //drill down
+ InvertTree(root.Left)
+ InvertTree(root.Right)
+ return root
+ //reverse state
+}
+
+//bfs
+func InvertTree2(root *TreeNode) *TreeNode {
+ if root == nil{
+ return nil
+ }
+ queue := []*TreeNode{root}
+ for len(queue) == 0 {
+ tmp:=queue[0]
+ queue = queue[1:]
+ left := tmp.Left
+ tmp.Left = tmp.Right
+ tmp.Right = left
+ if tmp.Left != nil{
+ queue = append(queue, tmp.Left)
+ }
+ if tmp.Right != nil{
+ queue = append(queue,tmp.Right)
+ }
+ }
+ return root
+
+
+}
+
+
diff --git a/Week_04/README.md b/Week_04/README.md
index 50de304..2fbcbcc 100644
--- a/Week_04/README.md
+++ b/Week_04/README.md
@@ -1 +1,3 @@
-学习笔记
\ No newline at end of file
+学习笔记
+这周比较忙,投入不够多。后续会投入更多时间,好好复习这周的内容。最近四周的学习中,发现有几个题目非常难以理解,例如寻找最近的公共祖先,需要不断的练习,形成肌肉记忆。
+在这里,我想提个问题那就是有没有这个必要两种语言(java和golang)把所有的题目都实现一遍?
\ No newline at end of file
diff --git "a/Week_04/\344\271\260\345\215\226\350\202\241\347\245\250\347\232\204\346\234\200\344\275\263\346\227\266\346\234\272II.java" "b/Week_04/\344\271\260\345\215\226\350\202\241\347\245\250\347\232\204\346\234\200\344\275\263\346\227\266\346\234\272II.java"
new file mode 100644
index 0000000..b6ff6af
--- /dev/null
+++ "b/Week_04/\344\271\260\345\215\226\350\202\241\347\245\250\347\232\204\346\234\200\344\275\263\346\227\266\346\234\272II.java"
@@ -0,0 +1,9 @@
+public class 买卖股票的最佳时机II {
+ public int maxProfit(int[] prices) {
+ int ans = 0;
+ for (int i = 1; i < prices.length; i++) {
+ ans += Math.max(0, prices[i] - prices[i - 1]);
+ }
+ return ans;
+ }
+}
diff --git "a/Week_04/\346\237\240\346\252\254\346\260\264\346\211\276\351\233\266860.java" "b/Week_04/\346\237\240\346\252\254\346\260\264\346\211\276\351\233\266860.java"
new file mode 100644
index 0000000..f7f5b2c
--- /dev/null
+++ "b/Week_04/\346\237\240\346\252\254\346\260\264\346\211\276\351\233\266860.java"
@@ -0,0 +1,29 @@
+public class 柠檬水找零860 {
+ public boolean lemonadeChange(int[] bills) {
+
+ int five = 0;
+ int ten = 0;
+ for (int bill : bills) {
+ if (bill == 5) {
+ five++;
+ }else if (bill == 10){
+ if (five == 0){
+ return false;
+ }
+ five--;
+ ten++;
+ }else {
+ if (five>=1 && ten>=1){
+ five--;
+ ten--;
+ }else if (five>=3){
+ five -= 3;
+ }else{
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+}
diff --git "a/Week_04/\347\254\254k\344\270\252\346\225\260.java" "b/Week_04/\347\254\254k\344\270\252\346\225\260.java"
new file mode 100644
index 0000000..f21d211
--- /dev/null
+++ "b/Week_04/\347\254\254k\344\270\252\346\225\260.java"
@@ -0,0 +1,17 @@
+public class 第k个数 {
+ public int getKthMagicNumber(int k) {
+ int[] dp = new int[k];
+ int p3 = 0, p5 = 0, p7 = 0;
+ dp[0] =1;
+ for (int i = 1; i < k; i++) {
+ // 选出最小的数字
+ dp[i] = Math.min(dp[p3] * 3, Math.min(dp[p5] * 5, dp[p7] * 7));
+ // 将该数字对应的指针向前移动一步。
+ if( dp[i] == dp[p3] * 3 ) p3++;
+ if( dp[i] == dp[p5] * 5 ) p5++;
+ if( dp[i] == dp[p7] * 7 ) p7++;
+ }
+ return dp[k-1];
+
+ }
+}
diff --git "a/Week_04/\350\267\263\350\267\203\346\270\270\346\210\217II45.java" "b/Week_04/\350\267\263\350\267\203\346\270\270\346\210\217II45.java"
new file mode 100644
index 0000000..f128e1f
--- /dev/null
+++ "b/Week_04/\350\267\263\350\267\203\346\270\270\346\210\217II45.java"
@@ -0,0 +1,45 @@
+public class 跳跃游戏II45 {
+ //时间复杂度:O(n^2),其中 n 是数组长度。有两层嵌套循环,在最坏的情况下,例如数组中的所有元素都是 1,
+ // position 需要遍历数组中的每个位置,对于 position 的每个值都有一次循环。
+ //空间复杂度:O(1)。
+ //反向查找
+ public int jump(int[] nums) {
+ int position = nums.length - 1;
+ int step = 0;
+ while (position > 0) {
+ for (int i = 0; i < position; i++) {
+ if ((nums[i] + i) >= position) {
+ step++;
+ position = i;
+ break;
+ }
+ }
+ }
+ return step;
+ }
+
+//时间复杂度:O(n),其中 nn 是数组长度。
+//
+//空间复杂度:O(1)。
+ public int Jump2(int[] nums) {
+ int length = nums.length;
+ int end = 0;
+ int maxPosition = 0;
+ int steps = 0;
+ for (int i = 0; i < length-1; i++) {
+ maxPosition = Math.max(maxPosition, i + nums[i]);
+ if (i == end) {
+ end = maxPosition;
+ steps++;
+ }
+ }
+ return steps;
+ }
+
+ public static void main(String[] args) {
+ int[] arr = {2,3,1,2,4,2,3};
+ 跳跃游戏II45 t = new 跳跃游戏II45();
+ t.Jump2(arr);
+ }
+
+}
diff --git a/Week_05/foo.go b/Week_05/foo.go
new file mode 100644
index 0000000..7cd7c80
--- /dev/null
+++ b/Week_05/foo.go
@@ -0,0 +1,18 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/25
+ @note:
+**/
+package Week_05
+
+func foo(key, val int, store map[int]int) int{
+ if v, ok := store[key]; ok {
+ if val == v {
+ return 1
+ }
+ return 2
+ }else{
+ store[key] = val
+ return 0
+ }
+}
diff --git a/Week_06/README.md b/Week_06/README.md
index 50de304..4191965 100644
--- a/Week_06/README.md
+++ b/Week_06/README.md
@@ -1 +1,8 @@
-学习笔记
\ No newline at end of file
+学习笔记
+dp得自上而下去思考来分解成子问题,但是得自下而上去计算避免重复运算;
+golang 只有slice 而java有queue 所以在实现的时候能按照Java的思路来做,但是一些细节还有注意一下
+例如 queue中的poll 永远只取第一个element,而且整个队列的lenth减一,但是如果slice[i]去取就要注意了,
+小心数组越界;不过可以一直用slice[0]
+或者用下面的方法,先取,不删除,for循环遍历完成后一起删除
+poll 操作等于取值+删除两个动作,而slice[i]只是其中的取,所以一定要记得删除,
+至于你是立马删除,还是延后删除怎么方便怎么来
\ No newline at end of file
diff --git "a/Week_06/\345\233\236\346\226\207\345\255\220\344\270\262647.go" "b/Week_06/\345\233\236\346\226\207\345\255\220\344\270\262647.go"
new file mode 100644
index 0000000..e36861c
--- /dev/null
+++ "b/Week_06/\345\233\236\346\226\207\345\255\220\344\270\262647.go"
@@ -0,0 +1,33 @@
+/**
+ @author: dingfeng
+ @date: 2021/2/6
+ @note:
+**/
+package leetcode
+
+/*
+动态规划
+dp[i][j] 表示s[i,j]的子串是不是回文字符串
+*/
+func CountSubstrings(s string) int {
+ dp := make([][]bool, len(s))
+ for i := 0; i < len(dp); i++ {
+ dp[i] = make([]bool, len(s))
+ }
+ count:=0
+ for j := 0; j < len(s); j++ {
+ for i := 0; i <= j; i++ {
+ if i == j {
+ dp[i][j] = true
+ count++
+ } else if j-i == 1 && s[i] == s[j] {
+ dp[i][j] = true
+ count++
+ } else if j-i > 1 && s[i] == s[j] && dp[i+1][j-1] {
+ dp[i][j] = true
+ count++
+ }
+ }
+ }
+ return count
+}
diff --git "a/Week_06/\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242221.go" "b/Week_06/\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242221.go"
new file mode 100644
index 0000000..52032a4
--- /dev/null
+++ "b/Week_06/\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242221.go"
@@ -0,0 +1,104 @@
+/**
+ @author: dingfeng
+ @date: 2021/2/6
+ @note:
+**/
+package leetcode
+
+/*
+暴力求解
+时间复杂度:O(mnmin(m,n)^2),其中 m 和 n 是矩阵的行数和列数。
+
+需要遍历整个矩阵寻找每个 1,遍历矩阵的时间复杂度是 O(mn)。
+对于每个可能的正方形,其边长不超过 m 和 n 中的最小值,需要遍历该正
+方形中的每个元素判断是不是只包含 1,遍历正方形时间复杂度是 O(mn min(m,n)^2)
+
+总时间复杂度是 O(mn min(m,n)^2)
+
+空间复杂度:O(1)。额外使用的空间复杂度为常数。
+
+*/
+func maximalSquare(matrix [][]byte) int {
+
+ row := len(matrix)
+ if row == 0 {
+ return 0
+ }
+ column := len(matrix[0])
+ if column == 0 {
+ return 0
+ }
+ maxside := 0
+ for i := 0; i < row; i++ {
+ for j := 0; j < column; j++ {
+ if matrix[i][j] == '1' {
+ maxside = max(maxside, 1)
+ currmaxside := min(row-i, column-j)
+ for k := 1; k < currmaxside; k++ {
+ flag := true
+ if matrix[i+k][j+k] == '0' {
+ break
+ }
+ for m := 0; m < k; m++ {
+ if matrix[i+m][j+k] == '0' || matrix[i+k][j+m] == '0' {
+ flag = false
+ break
+ }
+ }
+ if flag {
+ maxside = max(maxside, k+1)
+ } else {
+ break
+ }
+
+ }
+ }
+ }
+
+ }
+
+ return maxside * maxside
+}
+
+/*
+可以用动态规划来解决
+if a[i][j] == '1'
+dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
+if a[i][j] == '0'
+dp[i][j] = 0
+dp[i][j]表示以i和j为右下角组成的最大正方形
+*/
+func maximalSquare2(matrix [][]byte) int {
+ row := len(matrix)
+ if row == 0 {
+ return 0
+ }
+ column := len(matrix[0])
+ if column == 0 {
+ return 0
+ }
+
+ dp := make([][]int, row)
+ for i := 0; i < len(dp); i++ {
+ dp[i] = make([]int, column)
+ }
+ maxside := 0
+ for i := 0; i < row; i++ {
+ for j := 0; j < column; j++ {
+ if matrix[i][j] == '0' {
+ dp[i][j] = 0
+ } else {
+ if i == 0 {
+ dp[i][j] = 1
+ } else if j == 0 {
+ dp[i][j] = 1
+ } else {
+ dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1
+ }
+ }
+ maxside = max(maxside, dp[i][j])
+ }
+ }
+ return maxside * maxside
+
+}
diff --git "a/Week_06/\346\234\200\345\260\217\350\267\257\345\276\204\345\222\21464.go" "b/Week_06/\346\234\200\345\260\217\350\267\257\345\276\204\345\222\21464.go"
new file mode 100644
index 0000000..ded38d5
--- /dev/null
+++ "b/Week_06/\346\234\200\345\260\217\350\267\257\345\276\204\345\222\21464.go"
@@ -0,0 +1,36 @@
+/**
+ @author: dingfeng
+ @date: 2021/2/5
+ @note:
+**/
+package leetcode
+
+/*
+动态规划
+状态转移方程
+f(x,y) = min(f(x-1,y),f(x,y-1)+grid(x,y)
+复杂度分析
+
+时间复杂度:O(mn),其中 m 和 n 分别是网格的行数和列数。需要对整个网格遍历一次,计算dp 的每个元素的值。
+
+空间复杂度:O(mn),其中 m 和 n 分别是网格的行数和列数。创建一个二维数组 dp,和网格大小相同。
+空间复杂度可以优化,例如每次只存储上一行的}dp 值,则可以将空间复杂度优化到 O(n)。
+
+*/
+func MinPathSum(grid [][]int) int {
+ n := len(grid)
+ m := len(grid[0])
+ dp := grid
+ for i := 1; i < len(grid); i++ {
+ dp[i][0] += dp[i-1][0]
+ }
+ for i := 1; i < len(grid[0]); i++ {
+ dp[0][i] += dp[0][i-1]
+ }
+ for i := 1; i < n; i++ {
+ for j := 1; j < m; j++ {
+ dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
+ }
+ }
+ return dp[n-1][m-1]
+}
diff --git "a/Week_06/\350\247\243\347\240\201\346\226\271\346\263\22591.go" "b/Week_06/\350\247\243\347\240\201\346\226\271\346\263\22591.go"
new file mode 100644
index 0000000..495ed5b
--- /dev/null
+++ "b/Week_06/\350\247\243\347\240\201\346\226\271\346\263\22591.go"
@@ -0,0 +1,50 @@
+/**
+ @author: dingfeng
+ @date: 2021/2/6
+ @note:
+**/
+package leetcode
+
+import (
+ "strings"
+)
+
+/*
+动态规划
+F[i] = F[i-1]+1
+F[i] = F[i-2]+1
+*/
+func NumDecodings(s string) int {
+ if strings.HasPrefix(s, "0") {
+ return 0
+ }
+ dp := make([]int, len(s))
+ dp[0] = 1
+ if len(s) >= 2 {
+ if s[0] > 50 && s[1] == '0' {
+ return 0
+ }
+ dp[1] = 1
+ if s[1] != '0' {
+ if s[0] == '1' || s[0] == '2' && s[1] <= 54 {
+ dp[1] = 2
+ }
+ }
+ }
+
+ for i := 2; i < len(s); i++ {
+ if s[i] == '0' && s[i-1] != '1' && s[i-1] != '2' {
+ return 0
+ }
+ if s[i] != '0' {
+ dp[i] = dp[i-1]
+ if (s[i-1] == '2' && s[i] <= 54) || (s[i-1] == '1') {
+ dp[i] += dp[i-2]
+ }
+ } else {
+ dp[i] = dp[i-2]
+ }
+ }
+ return dp[len(s)-1]
+
+}
diff --git a/Week_07/README.md b/Week_07/README.md
index 50de304..3e89194 100644
--- a/Week_07/README.md
+++ b/Week_07/README.md
@@ -1 +1,5 @@
-学习笔记
\ No newline at end of file
+学习笔记
+本周的课中启发式搜索个人感觉还是不太理解,希望后续助教或者超哥能在群里在讨论下。
+另外发现前面学习的算法和数据结构
+,经过一个春节之后,会忘记大部分。很多学过的算法都要重新再看一遍,这就很头疼。
+(在前期的学习中,我也非常认真,当时也都理解并且掌握了,但是过一段时间不接触又不知道咋写了)
diff --git "a/Week_07/\345\215\225\350\257\215\346\216\245\351\276\231127.go" "b/Week_07/\345\215\225\350\257\215\346\216\245\351\276\231127.go"
new file mode 100644
index 0000000..fe8b4e6
--- /dev/null
+++ "b/Week_07/\345\215\225\350\257\215\346\216\245\351\276\231127.go"
@@ -0,0 +1,11 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/26
+ @note:
+**/
+package leetcode
+
+
+//func ladderLength(beginWord string, endWord string, wordList []string) int {
+//
+//}
\ No newline at end of file
diff --git "a/Week_07/\345\262\233\345\261\277\346\225\260\351\207\217200/Solution.java" "b/Week_07/\345\262\233\345\261\277\346\225\260\351\207\217200/Solution.java"
new file mode 100644
index 0000000..0f8c0af
--- /dev/null
+++ "b/Week_07/\345\262\233\345\261\277\346\225\260\351\207\217200/Solution.java"
@@ -0,0 +1,71 @@
+package 岛屿数量200;
+
+public class Solution {
+ // private int m;
+// private int n;
+ public int NumIslands(char[][] grid) {
+ int m = grid.length;
+ if (m == 0) return 0;
+ int n = grid[0].length;
+ if (n == 0) return 0;
+ int count = 0;
+ for (int i = 0; i < grid.length; i++) {
+ for (int j = 0; j < grid[i].length; j++) {
+ if (grid[i][j] == '1') {
+ dfs(m, n, i, j, grid);
+ count++;
+ }
+ }
+ }
+ System.out.println(count);
+ return count;
+
+ }
+
+ private void dfs(int m, int n, int i, int j, char[][] grid) {
+ if (i < 0 || j < 0 || i >= m || j >= n || grid[i][j] != '1') {
+ return;
+ }
+ //process logic
+ grid[i][j] = 0;
+ //drill down
+ dfs(m, n, i + 1, j, grid);
+ dfs(m, n, i - 1, j, grid);
+ dfs(m, n, i, j + 1, grid);
+ dfs(m, n, i, j - 1, grid);
+ }
+
+
+ //第二遍
+ public int numIslands2(char[][] grid) {
+
+ int m = grid.length;
+ if (m == 0) return m;
+ int n = grid[0].length;
+ if (n == 0) return n;
+ int count = 0;
+ for (int i = 0; i < m; i++) {
+ for (int j = 0; j < n; j++) {
+ if (grid[i][j] == '1') {
+ count++;
+ dfs2(m, n, i, j, grid);
+ }
+ }
+ }
+
+ return count;
+
+ }
+
+ private void dfs2(int m, int n, int i, int j, char[][] grid) {
+ if (i < 0 || j < 0 || i >= m || j >= n || grid[i][j] != '1') {
+ return;
+ }
+ grid[i][j] = '0';
+ dfs2(m, n, i + 1, j, grid);
+ dfs2(m, n, i - 1, j, grid);
+ dfs2(m, n, i, j + 1, grid);
+ dfs2(m, n, i, j - 1, grid);
+ }
+
+}
diff --git "a/Week_07/\346\213\254\345\217\267\347\224\237\346\210\22022.go" "b/Week_07/\346\213\254\345\217\267\347\224\237\346\210\22022.go"
new file mode 100644
index 0000000..6c8dc7e
--- /dev/null
+++ "b/Week_07/\346\213\254\345\217\267\347\224\237\346\210\22022.go"
@@ -0,0 +1,69 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/28
+ @note:
+**/
+package leetcode
+
+//dfs
+func generateParenthesis(n int) []string {
+ var res []string
+ var dfs func(left, right, n int, s string)
+ dfs = func(left, right, n int, s string) {
+ if left == n && right == n {
+ res = append(res, s)
+ return
+ }
+ if left < n {
+ dfs(left+1, right, n, s+"(")
+ }
+ if right < left {
+ dfs(left, right+1, n, s+")")
+ }
+ }
+ dfs(0, 0, n, "")
+ return res
+}
+
+type Node struct {
+ left int
+ right int
+ str string
+}
+
+//bfs
+func GenerateParenthesis2(n int) []string {
+ var res []string
+ queue := []*Node{{
+ left: 0,
+ right: 0,
+ str: "",
+ }}
+ for len(queue) > 0 {
+ lenth := len(queue)
+ for i := 0; i < lenth; i++ {
+ currnode := queue[i]
+ if currnode.left == n && currnode.right == n {
+ res = append(res, currnode.str)
+ }
+ if currnode.left < n {
+ queue = append(queue, &Node{
+ left: currnode.left + 1,
+ right: currnode.right,
+ str: currnode.str + "(",
+ })
+ }
+ if currnode.right < currnode.left {
+ //if currnode.right < currnode.left && currnode.right < n {
+ queue = append(queue, &Node{
+ left: currnode.left,
+ right: currnode.right + 1,
+ str: currnode.str + ")",
+ })
+ }
+
+ }
+ queue = queue[lenth:]
+ }
+ return res
+}
diff --git "a/Week_07/\346\234\200\345\260\217\345\237\272\345\233\240\345\217\230\345\214\226433.go" "b/Week_07/\346\234\200\345\260\217\345\237\272\345\233\240\345\217\230\345\214\226433.go"
new file mode 100644
index 0000000..5f9d910
--- /dev/null
+++ "b/Week_07/\346\234\200\345\260\217\345\237\272\345\233\240\345\217\230\345\214\226433.go"
@@ -0,0 +1,47 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/27
+ @note:
+**/
+package leetcode
+
+func minMutation(start string, end string, bank []string) int {
+ bankmap := make(map[string]bool)
+ for _, item := range bank {
+ bankmap[item] = true
+ }
+ if _, ok := bankmap[end]; !ok {
+ return -1
+ }
+ four := []byte{'A', 'C', 'G', 'T'}
+ step := 0
+ queue := []string{start}
+ for len(queue) > 0 {
+ step++
+ n := len(queue)
+ for i := 0; i < n; i++ {
+ currstr := queue[i]
+ for j := 0; j < len(currstr); j++ {
+ //oldchar := currstr[j]
+ for k := 0; k < len(four); k++ {
+ var transtr string
+ if j+1 == len(currstr) {
+ transtr = currstr[:j] + string(four[k])
+ } else {
+ transtr = currstr[:j] + string(four[k]) + currstr[j+1:]
+ }
+ if transtr == end {
+ return step
+ }
+ if _, ok := bankmap[transtr]; ok {
+ queue = append(queue, transtr)
+ delete(bankmap, transtr)
+ }
+ }
+ }
+ }
+ //出对列
+ queue = queue[n:]
+ }
+ return -1
+}
diff --git "a/Week_08/191\344\275\2151\347\232\204\344\270\252\346\225\260.go" "b/Week_08/191\344\275\2151\347\232\204\344\270\252\346\225\260.go"
new file mode 100644
index 0000000..8d795c7
--- /dev/null
+++ "b/Week_08/191\344\275\2151\347\232\204\344\270\252\346\225\260.go"
@@ -0,0 +1,10 @@
+package Week_08
+func hammingWeight(num uint32) int {
+ count:=0
+ for num!=0{
+ count++
+ // 去除最低位的1
+ num = num & (num-1)
+ }
+ return count
+}
diff --git "a/Week_08/2\347\232\204\345\271\202231.go" "b/Week_08/2\347\232\204\345\271\202231.go"
new file mode 100644
index 0000000..7f2dc33
--- /dev/null
+++ "b/Week_08/2\347\232\204\345\271\202231.go"
@@ -0,0 +1,4 @@
+package Week_08
+func isPowerOfTwo(n int) bool {
+ return n!=0 && n&(n-1)==0
+}
diff --git "a/Week_08/LRU \347\274\223\345\255\230\346\234\272\345\210\266146.go" "b/Week_08/LRU \347\274\223\345\255\230\346\234\272\345\210\266146.go"
new file mode 100644
index 0000000..8450d5f
--- /dev/null
+++ "b/Week_08/LRU \347\274\223\345\255\230\346\234\272\345\210\266146.go"
@@ -0,0 +1,83 @@
+package Week_08
+
+type LRUCache struct {
+ size int
+ capacity int
+ cache map[int]*DLinkedNode
+ head, tail *DLinkedNode
+}
+
+type DLinkedNode struct {
+ key, value int
+ prev, next *DLinkedNode
+}
+
+func initDLinkedNode(key, value int) *DLinkedNode {
+ return &DLinkedNode{
+ key: key,
+ value: value,
+ }
+}
+
+func Constructor(capacity int) LRUCache {
+ l := LRUCache{
+ cache: map[int]*DLinkedNode{},
+ head: initDLinkedNode(0, 0),
+ tail: initDLinkedNode(0, 0),
+ capacity: capacity,
+ }
+ l.head.next = l.tail
+ l.tail.prev = l.head
+ return l
+}
+
+func (this *LRUCache) Get(key int) int {
+ if _, ok := this.cache[key]; !ok {
+ return -1
+ }
+ node := this.cache[key]
+ this.moveToHead(node)
+ return node.value
+}
+
+
+func (this *LRUCache) Put(key int, value int) {
+ if _, ok := this.cache[key]; !ok {
+ node := initDLinkedNode(key, value)
+ this.cache[key] = node
+ this.addToHead(node)
+ this.size++
+ if this.size > this.capacity {
+ removed := this.removeTail()
+ delete(this.cache, removed.key)
+ this.size--
+ }
+ } else {
+ node := this.cache[key]
+ node.value = value
+ this.moveToHead(node)
+ }
+}
+
+func (this *LRUCache) addToHead(node *DLinkedNode) {
+ node.prev = this.head
+ node.next = this.head.next
+ this.head.next.prev = node
+ this.head.next = node
+}
+
+func (this *LRUCache) removeNode(node *DLinkedNode) {
+ node.prev.next = node.next
+ node.next.prev = node.prev
+}
+
+func (this *LRUCache) moveToHead(node *DLinkedNode) {
+ this.removeNode(node)
+ this.addToHead(node)
+}
+
+func (this *LRUCache) removeTail() *DLinkedNode {
+ node := this.tail.prev
+ this.removeNode(node)
+ return node
+}
diff --git a/Week_08/README.md b/Week_08/README.md
index 50de304..f3ff28f 100644
--- a/Week_08/README.md
+++ b/Week_08/README.md
@@ -1 +1,2 @@
-学习笔记
\ No newline at end of file
+学习笔记
+这周掌握了印象比较深刻的就是位运算的课程,非计算机专业出身,所以学了这节课之后,也使我受益匪浅。另外排序算法这一块,听了课程之后都懂,但是遇到具体排序问题时,灵活选择最合适的排序算法还是不太会。
\ No newline at end of file
diff --git "a/Week_08/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215242.go" "b/Week_08/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215242.go"
new file mode 100644
index 0000000..ebdef12
--- /dev/null
+++ "b/Week_08/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215242.go"
@@ -0,0 +1,11 @@
+package Week_08
+
+import "sort"
+
+func isAnagram(s string, t string) bool {
+ s1, s2 := []byte(s), []byte(t)
+ sort.Slice(s1, func(i, j int) bool { return s1[i] < s1[j] })
+ sort.Slice(s2, func(i, j int) bool { return s2[i] < s2[j] })
+ return string(s1) == string(s2)
+
+}
diff --git "a/Week_08/\351\242\240\345\200\222\344\272\214\350\277\233\345\210\266\344\275\215190.go" "b/Week_08/\351\242\240\345\200\222\344\272\214\350\277\233\345\210\266\344\275\215190.go"
new file mode 100644
index 0000000..c2ed1f7
--- /dev/null
+++ "b/Week_08/\351\242\240\345\200\222\344\272\214\350\277\233\345\210\266\344\275\215190.go"
@@ -0,0 +1,11 @@
+package Week_08
+func reverseBits(num uint32) uint32 {
+ var bitsize uint = 31
+ var ans uint32
+ for num != 0{
+ ans += (num & 1 << bitsize)
+ bitsize--
+ num = num >> 1
+ }
+ return ans
+}
diff --git a/Week_09/README.md b/Week_09/README.md
index 50de304..31cc365 100644
--- a/Week_09/README.md
+++ b/Week_09/README.md
@@ -1 +1,2 @@
-学习笔记
\ No newline at end of file
+学习笔记
+这周时间比较紧张,题目做的比较少,后面会用五毒神掌,多过遍数。
\ No newline at end of file
diff --git "a/Week_09/\344\273\205\344\273\205\345\217\215\350\275\254\345\255\227\346\257\215917.go" "b/Week_09/\344\273\205\344\273\205\345\217\215\350\275\254\345\255\227\346\257\215917.go"
new file mode 100644
index 0000000..81ad6dc
--- /dev/null
+++ "b/Week_09/\344\273\205\344\273\205\345\217\215\350\275\254\345\255\227\346\257\215917.go"
@@ -0,0 +1,29 @@
+/**
+ @author: dingfeng
+ @date: 2021/3/7
+ @note:
+**/
+package leetcode
+func reverseOnlyLetters(S string) string {
+ buf := []byte(S)
+ for i, j := 0, len(buf)-1; i < j; {
+ for i < j && !isLetter(buf[i]) {
+ i++
+ }
+ for i < j && !isLetter(buf[j]) {
+ j--
+ }
+ buf[i], buf[j] = buf[j], buf[i]
+ i++
+ j--
+ }
+ return string(buf)
+}
+
+func isLetter(c byte) bool {
+ if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' {
+ return true
+ }
+ return false
+}
+
diff --git "a/Week_09/\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\347\254\254\344\270\200\344\270\252\345\224\257\344\270\200\345\255\227\347\254\246387.go" "b/Week_09/\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\347\254\254\344\270\200\344\270\252\345\224\257\344\270\200\345\255\227\347\254\246387.go"
new file mode 100644
index 0000000..3651282
--- /dev/null
+++ "b/Week_09/\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\347\254\254\344\270\200\344\270\252\345\224\257\344\270\200\345\255\227\347\254\246387.go"
@@ -0,0 +1,18 @@
+/**
+ @author: dingfeng
+ @date: 2021/3/7
+ @note:
+**/
+package leetcode
+func firstUniqChar(s string) int {
+ cnt := [26]int{}
+ for _, ch := range s {
+ cnt[ch-'a']++
+ }
+ for i, ch := range s {
+ if cnt[ch-'a'] == 1 {
+ return i
+ }
+ }
+ return -1
+}
\ No newline at end of file
diff --git "a/Week_09/\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\24658.go" "b/Week_09/\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\24658.go"
new file mode 100644
index 0000000..f71834a
--- /dev/null
+++ "b/Week_09/\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\24658.go"
@@ -0,0 +1,16 @@
+/**
+ @author: dingfeng
+ @date: 2021/3/5
+ @note:
+**/
+package leetcode
+
+func lengthOfLastWord(s string) int {
+ maxindex := 0
+ for i := 0; i < len(s); i++ {
+ if s[i] == ' ' {
+ maxindex = i
+ }
+ }
+ return len(s)-maxindex-1
+}
diff --git "a/Week_09/\350\275\254\346\215\242\346\210\220\345\260\217\345\206\231\345\255\227\346\257\215709.go" "b/Week_09/\350\275\254\346\215\242\346\210\220\345\260\217\345\206\231\345\255\227\346\257\215709.go"
new file mode 100644
index 0000000..75d16c3
--- /dev/null
+++ "b/Week_09/\350\275\254\346\215\242\346\210\220\345\260\217\345\206\231\345\255\227\346\257\215709.go"
@@ -0,0 +1,24 @@
+/**
+ @author: dingfeng
+ @date: 2021/3/5
+ @note:
+**/
+package leetcode
+
+import "strings"
+
+func toLowerCase(str string) string {
+ return strings.ToLower(str)
+}
+func toLowerCase2(str string) string {
+ var b strings.Builder
+ b.Grow(len(str))
+ for i := 0; i < len(str); i++ {
+ c := str[i]
+ if 'A' <= c && c <= 'Z' {
+ c += 'a' - 'A'
+ }
+ b.WriteByte(c)
+ }
+ return b.String()
+}
\ No newline at end of file
diff --git "a/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225-\346\200\235\347\273\264\345\257\274\345\233\276.pdf" "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225-\346\200\235\347\273\264\345\257\274\345\233\276.pdf"
new file mode 100644
index 0000000..c54b09d
Binary files /dev/null and "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225-\346\200\235\347\273\264\345\257\274\345\233\276.pdf" differ
diff --git "a/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245\346\257\225\344\270\232\346\200\273\347\273\223.docx" "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245\346\257\225\344\270\232\346\200\273\347\273\223.docx"
new file mode 100644
index 0000000..88b8b32
Binary files /dev/null and "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245\346\257\225\344\270\232\346\200\273\347\273\223.docx" differ
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..d36a2c4
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,3 @@
+module algorithm023
+
+go 1.14
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..e66a1d2
--- /dev/null
+++ b/main.go
@@ -0,0 +1,62 @@
+/**
+ @author: dingfeng
+ @date: 2021/1/15
+ @note:
+**/
+package main
+
+import (
+ "algorithm023/Week_03"
+ "fmt"
+)
+
+func main(){
+ //tn := Week_03.TreeNode{
+ // Val: 1,
+ // Left: &Week_03.TreeNode{
+ // Val: 2,
+ // Left: &Week_03.TreeNode{
+ // Val: 4,
+ // Left: &Week_03.TreeNode{
+ // Val: 8,
+ // },
+ // Right: &Week_03.TreeNode{
+ // Val: 9,
+ // },
+ // },
+ // Right: &Week_03.TreeNode{
+ // Val: 5,
+ // Left: &Week_03.TreeNode{
+ // Val: 10,
+ // },
+ // Right: &Week_03.TreeNode{
+ // Val: 11,
+ // },
+ // },
+ // },
+ // Right: &Week_03.TreeNode{
+ // Val: 3,
+ // Left: &Week_03.TreeNode{
+ // Val: 6,
+ // Left: &Week_03.TreeNode{
+ // Val: 12,
+ // },
+ // Right: &Week_03.TreeNode{
+ // Val: 13,
+ // },
+ // },
+ // Right: &Week_03.TreeNode{
+ // Val: 7,
+ // Left: &Week_03.TreeNode{
+ // Val: 14,
+ // },
+ // Right: &Week_03.TreeNode{
+ // Val: 15,
+ // },
+ // },
+ // },
+ //}
+ //res:=Week_03.LowestCommonAncestor(&tn,&Week_03.TreeNode{Val: 9},&Week_03.TreeNode{Val: 11})
+ res := Week_03.Combine(4,2)
+ fmt.Println(res)
+}
\ No newline at end of file