diff --git a/codes/c/chapter_heap/my_heap.c b/codes/c/chapter_heap/my_heap.c index a6f4e8342..308a3cf1c 100644 --- a/codes/c/chapter_heap/my_heap.c +++ b/codes/c/chapter_heap/my_heap.c @@ -52,7 +52,7 @@ int right(MaxHeap *maxHeap, int i) { /* 获取父节点的索引 */ int parent(MaxHeap *maxHeap, int i) { - return (i - 1) / 2; + return (i - 1) / 2; // 向下取整 } /* 交换元素 */ diff --git a/codes/kotlin/chapter_array_and_linkedlist/linked_list.kt b/codes/kotlin/chapter_array_and_linkedlist/linked_list.kt index 8431e08dc..15b3ee4aa 100644 --- a/codes/kotlin/chapter_array_and_linkedlist/linked_list.kt +++ b/codes/kotlin/chapter_array_and_linkedlist/linked_list.kt @@ -20,6 +20,7 @@ fun insert(n0: ListNode?, p: ListNode?) { fun remove(n0: ListNode?) { if (n0?.next == null) return + // n0 -> P -> n1 val p = n0.next val n1 = p?.next n0.next = n1 @@ -78,10 +79,10 @@ fun main() { printLinkedList(n0) /* 访问节点 */ - val node: ListNode = access(n0, 3)!! + val node = access(n0, 3)!! println("链表中索引 3 处的节点的值 = ${node._val}") /* 查找节点 */ - val index: Int = find(n0, 2) + val index = find(n0, 2) println("链表中值为 2 的节点的索引 = $index") } \ No newline at end of file diff --git a/codes/kotlin/chapter_computational_complexity/recursion.kt b/codes/kotlin/chapter_computational_complexity/recursion.kt index 1d89b7606..0b7ac65a8 100644 --- a/codes/kotlin/chapter_computational_complexity/recursion.kt +++ b/codes/kotlin/chapter_computational_complexity/recursion.kt @@ -26,6 +26,7 @@ fun forLoopRecur(n: Int): Int { var res = 0 // 递: 递归调用 for (i in n downTo 0) { + // 通过“入栈操作”模拟“递” stack.push(i) } // 归: 返回结果 diff --git a/codes/kotlin/chapter_computational_complexity/time_complexity.kt b/codes/kotlin/chapter_computational_complexity/time_complexity.kt index 534cf2854..0c4c98a7d 100644 --- a/codes/kotlin/chapter_computational_complexity/time_complexity.kt +++ b/codes/kotlin/chapter_computational_complexity/time_complexity.kt @@ -18,7 +18,6 @@ fun constant(n: Int): Int { /* 线性阶 */ fun linear(n: Int): Int { var count = 0 - // 循环次数与数组长度成正比 for (i in 0.. nums[j + 1]) { // 交换 nums[j] 与 nums[j + 1] - nums[j] = nums[j + 1].also { nums[j + 1] = nums[j] } + val temp = nums[j] + nums[j] = nums[j + 1] + nums[j + 1] = temp count += 3 // 元素交换包含 3 个单元操作 } } @@ -66,8 +67,8 @@ fun bubbleSort(nums: IntArray): Int { /* 指数阶(循环实现) */ fun exponential(n: Int): Int { var count = 0 - // 细胞每轮一分为二,形成数列 1, 2, 4, 8, ..., 2^(n-1) var base = 1 + // 细胞每轮一分为二,形成数列 1, 2, 4, 8, ..., 2^(n-1) for (i in 0.. { for (i in 0..(n) for (i in 0..>) { init { // 添加所有顶点和边 for (edge in edges) { - addVertex(edge[0]!!); - addVertex(edge[1]!!); - addEdge(edge[0]!!, edge[1]!!); + addVertex(edge[0]!!) + addVertex(edge[1]!!) + addEdge(edge[0]!!, edge[1]!!) } } @@ -34,7 +34,7 @@ class GraphAdjList(edges: Array>) { throw IllegalArgumentException() // 添加边 vet1 - vet2 adjList[vet1]?.add(vet2) - adjList[vet2]?.add(vet1); + adjList[vet2]?.add(vet1) } /* 删除边 */ @@ -42,8 +42,8 @@ class GraphAdjList(edges: Array>) { if (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2) throw IllegalArgumentException() // 删除边 vet1 - vet2 - adjList[vet1]?.remove(vet2); - adjList[vet2]?.remove(vet1); + adjList[vet1]?.remove(vet2) + adjList[vet2]?.remove(vet1) } /* 添加顶点 */ @@ -59,7 +59,7 @@ class GraphAdjList(edges: Array>) { if (!adjList.containsKey(vet)) throw IllegalArgumentException() // 在邻接表中删除顶点 vet 对应的链表 - adjList.remove(vet); + adjList.remove(vet) // 遍历其他顶点的链表,删除所有包含 vet 的边 for (list in adjList.values) { list.remove(vet) diff --git a/codes/kotlin/chapter_graph/graph_adjacency_matrix.kt b/codes/kotlin/chapter_graph/graph_adjacency_matrix.kt index c97e05dd0..7471f9bf0 100644 --- a/codes/kotlin/chapter_graph/graph_adjacency_matrix.kt +++ b/codes/kotlin/chapter_graph/graph_adjacency_matrix.kt @@ -69,8 +69,8 @@ class GraphAdjMat(vertices: IntArray, edges: Array) { if (i < 0 || j < 0 || i >= size() || j >= size() || i == j) throw IndexOutOfBoundsException() // 在无向图中,邻接矩阵关于主对角线对称,即满足 (i, j) == (j, i) - adjMat[i][j] = 1; - adjMat[j][i] = 1; + adjMat[i][j] = 1 + adjMat[j][i] = 1 } /* 删除边 */ @@ -79,15 +79,15 @@ class GraphAdjMat(vertices: IntArray, edges: Array) { // 索引越界与相等处理 if (i < 0 || j < 0 || i >= size() || j >= size() || i == j) throw IndexOutOfBoundsException() - adjMat[i][j] = 0; - adjMat[j][i] = 0; + adjMat[i][j] = 0 + adjMat[j][i] = 0 } /* 打印邻接矩阵 */ fun print() { print("顶点列表 = ") - println(vertices); - println("邻接矩阵 ="); + println(vertices) + println("邻接矩阵 =") printMatrix(adjMat) } } diff --git a/codes/kotlin/chapter_hashing/array_hash_map.kt b/codes/kotlin/chapter_hashing/array_hash_map.kt index 1bcfe6ab5..f0bab31f1 100644 --- a/codes/kotlin/chapter_hashing/array_hash_map.kt +++ b/codes/kotlin/chapter_hashing/array_hash_map.kt @@ -68,7 +68,8 @@ class ArrayHashMap { fun valueSet(): MutableList { val valueSet = mutableListOf() for (pair in buckets) { - pair?.let { valueSet.add(it._val) } + if (pair != null) + valueSet.add(pair._val) } return valueSet } @@ -78,7 +79,7 @@ class ArrayHashMap { for (kv in pairSet()) { val key = kv.key val _val = kv._val - println("${key} -> ${_val}") + println("$key -> $_val") } } } diff --git a/codes/kotlin/chapter_hashing/built_in_hash.kt b/codes/kotlin/chapter_hashing/built_in_hash.kt index 88bb3ff67..2ad958b04 100644 --- a/codes/kotlin/chapter_hashing/built_in_hash.kt +++ b/codes/kotlin/chapter_hashing/built_in_hash.kt @@ -28,7 +28,7 @@ fun main() { val arr = arrayOf(12836, "小哈") val hashTup = arr.contentHashCode() - println("数组 ${arr.contentToString()} 的哈希值为 ${hashTup}") + println("数组 ${arr.contentToString()} 的哈希值为 $hashTup") val obj = ListNode(0) val hashObj = obj.hashCode() diff --git a/codes/kotlin/chapter_hashing/hash_map_chaining.kt b/codes/kotlin/chapter_hashing/hash_map_chaining.kt index e59df4a6e..c8fdb8f2f 100644 --- a/codes/kotlin/chapter_hashing/hash_map_chaining.kt +++ b/codes/kotlin/chapter_hashing/hash_map_chaining.kt @@ -7,7 +7,7 @@ package chapter_hashing /* 链式地址哈希表 */ -class HashMapChaining() { +class HashMapChaining { var size: Int // 键值对数量 var capacity: Int // 哈希表容量 val loadThres: Double // 触发扩容的负载因子阈值 diff --git a/codes/kotlin/chapter_hashing/simple_hash.kt b/codes/kotlin/chapter_hashing/simple_hash.kt index fdb51ef3c..a860eb84c 100644 --- a/codes/kotlin/chapter_hashing/simple_hash.kt +++ b/codes/kotlin/chapter_hashing/simple_hash.kt @@ -6,11 +6,10 @@ package chapter_hashing -const val MODULUS = 1000000007 - /* 加法哈希 */ fun addHash(key: String): Int { var hash = 0L + val MODULUS = 1000000007 for (c in key.toCharArray()) { hash = (hash + c.code) % MODULUS } @@ -20,6 +19,7 @@ fun addHash(key: String): Int { /* 乘法哈希 */ fun mulHash(key: String): Int { var hash = 0L + val MODULUS = 1000000007 for (c in key.toCharArray()) { hash = (31 * hash + c.code) % MODULUS } @@ -29,6 +29,7 @@ fun mulHash(key: String): Int { /* 异或哈希 */ fun xorHash(key: String): Int { var hash = 0 + val MODULUS = 1000000007 for (c in key.toCharArray()) { hash = hash xor c.code } @@ -38,6 +39,7 @@ fun xorHash(key: String): Int { /* 旋转哈希 */ fun rotHash(key: String): Int { var hash = 0L + val MODULUS = 1000000007 for (c in key.toCharArray()) { hash = ((hash shl 4) xor (hash shr 28) xor c.code.toLong()) % MODULUS } diff --git a/codes/kotlin/chapter_heap/my_heap.kt b/codes/kotlin/chapter_heap/my_heap.kt index 23b5b4f06..4381af22a 100644 --- a/codes/kotlin/chapter_heap/my_heap.kt +++ b/codes/kotlin/chapter_heap/my_heap.kt @@ -41,7 +41,9 @@ class MaxHeap(nums: MutableList?) { /* 交换元素 */ private fun swap(i: Int, j: Int) { - maxHeap[i] = maxHeap[j].also { maxHeap[j] = maxHeap[i] } + val temp = maxHeap[i] + maxHeap[i] = maxHeap[j] + maxHeap[j] = temp } /* 获取堆大小 */ diff --git a/codes/kotlin/chapter_sorting/bubble_sort.kt b/codes/kotlin/chapter_sorting/bubble_sort.kt index 12608d160..6f4f86b47 100644 --- a/codes/kotlin/chapter_sorting/bubble_sort.kt +++ b/codes/kotlin/chapter_sorting/bubble_sort.kt @@ -14,7 +14,9 @@ fun bubbleSort(nums: IntArray) { for (j in 0.. nums[j + 1]) { // 交换 nums[j] 与 nums[j + 1] - nums[j] = nums[j + 1].also { nums[j + 1] = nums[j] } + val temp = nums[j] + nums[j] = nums[j + 1] + nums[j + 1] = temp } } } @@ -29,7 +31,9 @@ fun bubbleSortWithFlag(nums: IntArray) { for (j in 0.. nums[j + 1]) { // 交换 nums[j] 与 nums[j + 1] - nums[j] = nums[j + 1].also { nums[j] = nums[j + 1] } + val temp = nums[j] + nums[j] = nums[j + 1] + nums[j + 1] = temp flag = true // 记录交换元素 } } diff --git a/codes/kotlin/chapter_sorting/heap_sort.kt b/codes/kotlin/chapter_sorting/heap_sort.kt index a0f59448c..e7be26d24 100644 --- a/codes/kotlin/chapter_sorting/heap_sort.kt +++ b/codes/kotlin/chapter_sorting/heap_sort.kt @@ -22,7 +22,9 @@ fun siftDown(nums: IntArray, n: Int, li: Int) { if (ma == i) break // 交换两节点 - nums[i] = nums[ma].also { nums[ma] = nums[i] } + val temp = nums[i] + nums[i] = nums[ma] + nums[ma] = temp // 循环向下堆化 i = ma } @@ -37,7 +39,9 @@ fun heapSort(nums: IntArray) { // 从堆中提取最大元素,循环 n-1 轮 for (i in nums.size - 1 downTo 1) { // 交换根节点与最右叶节点(交换首元素与尾元素) - nums[0] = nums[i].also { nums[i] = nums[0] } + val temp = nums[0] + nums[0] = nums[i] + nums[i] = temp // 以根节点为起点,从顶至底进行堆化 siftDown(nums, i, 0) } diff --git a/codes/kotlin/chapter_sorting/quick_sort.kt b/codes/kotlin/chapter_sorting/quick_sort.kt index 09f8c91bb..77bfa9235 100644 --- a/codes/kotlin/chapter_sorting/quick_sort.kt +++ b/codes/kotlin/chapter_sorting/quick_sort.kt @@ -8,7 +8,9 @@ package chapter_sorting /* 元素交换 */ fun swap(nums: IntArray, i: Int, j: Int) { - nums[i] = nums[j].also { nums[j] = nums[i] } + val temp = nums[i] + nums[i] = nums[j] + nums[j] = temp } /* 哨兵划分 */ diff --git a/codes/kotlin/chapter_sorting/selection_sort.kt b/codes/kotlin/chapter_sorting/selection_sort.kt index 823d4ff70..653b7ab08 100644 --- a/codes/kotlin/chapter_sorting/selection_sort.kt +++ b/codes/kotlin/chapter_sorting/selection_sort.kt @@ -18,7 +18,9 @@ fun selectionSort(nums: IntArray) { k = j // 记录最小元素的索引 } // 将该最小元素与未排序区间的首个元素交换 - nums[i] = nums[k].also { nums[k] = nums[i] } + val temp = nums[i] + nums[i] = nums[k] + nums[k] = temp } } diff --git a/codes/kotlin/chapter_stack_and_queue/linkedlist_stack.kt b/codes/kotlin/chapter_stack_and_queue/linkedlist_stack.kt index b63f3639a..434f0891d 100644 --- a/codes/kotlin/chapter_stack_and_queue/linkedlist_stack.kt +++ b/codes/kotlin/chapter_stack_and_queue/linkedlist_stack.kt @@ -34,7 +34,7 @@ class LinkedListStack( fun pop(): Int? { val num = peek() stackPeek = stackPeek?.next - stkSize--; + stkSize-- return num } diff --git a/codes/kotlin/chapter_tree/array_binary_tree.kt b/codes/kotlin/chapter_tree/array_binary_tree.kt index 43e05de09..06c3b0c1f 100644 --- a/codes/kotlin/chapter_tree/array_binary_tree.kt +++ b/codes/kotlin/chapter_tree/array_binary_tree.kt @@ -10,7 +10,6 @@ import utils.TreeNode import utils.printTree /* 数组表示下的二叉树类 */ -/* 构造方法 */ class ArrayBinaryTree(private val tree: MutableList) { /* 列表容量 */ fun size(): Int { @@ -93,7 +92,7 @@ class ArrayBinaryTree(private val tree: MutableList) { /* Driver Code */ fun main() { // 初始化二叉树 - // 这里借助了一个从数组直接生成二叉树的函数 + // 这里借助了一个从列表直接生成二叉树的函数 val arr = mutableListOf(1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15) val root = TreeNode.listToTree(arr) diff --git a/codes/kotlin/chapter_tree/binary_tree_bfs.kt b/codes/kotlin/chapter_tree/binary_tree_bfs.kt index 65e687721..9f5bf6c59 100644 --- a/codes/kotlin/chapter_tree/binary_tree_bfs.kt +++ b/codes/kotlin/chapter_tree/binary_tree_bfs.kt @@ -19,7 +19,7 @@ fun levelOrder(root: TreeNode?): MutableList { val list = mutableListOf() while (queue.isNotEmpty()) { val node = queue.poll() // 队列出队 - list.add(node?._val!!) // 保存节点值 + list.add(node?._val!!) // 保存节点值 if (node.left != null) queue.offer(node.left) // 左子节点入队 if (node.right != null) @@ -31,7 +31,7 @@ fun levelOrder(root: TreeNode?): MutableList { /* Driver Code */ fun main() { /* 初始化二叉树 */ - // 这里借助了一个从数组直接生成二叉树的函数 + // 这里借助了一个从列表直接生成二叉树的函数 val root = TreeNode.listToTree(mutableListOf(1, 2, 3, 4, 5, 6, 7)) println("\n初始化二叉树\n") printTree(root) diff --git a/codes/kotlin/chapter_tree/binary_tree_dfs.kt b/codes/kotlin/chapter_tree/binary_tree_dfs.kt index cc101e26b..7a1ae8b9a 100644 --- a/codes/kotlin/chapter_tree/binary_tree_dfs.kt +++ b/codes/kotlin/chapter_tree/binary_tree_dfs.kt @@ -42,7 +42,7 @@ fun postOrder(root: TreeNode?) { /* Driver Code */ fun main() { /* 初始化二叉树 */ - // 这里借助了一个从数组直接生成二叉树的函数 + // 这里借助了一个从列表直接生成二叉树的函数 val root = TreeNode.listToTree(mutableListOf(1, 2, 3, 4, 5, 6, 7)) println("\n初始化二叉树\n") printTree(root) diff --git a/codes/swift/chapter_dynamic_programming/climbing_stairs_backtrack.swift b/codes/swift/chapter_dynamic_programming/climbing_stairs_backtrack.swift index d1e241bab..b5356ee5e 100644 --- a/codes/swift/chapter_dynamic_programming/climbing_stairs_backtrack.swift +++ b/codes/swift/chapter_dynamic_programming/climbing_stairs_backtrack.swift @@ -16,7 +16,9 @@ func backtrack(choices: [Int], state: Int, n: Int, res: inout [Int]) { if state + choice > n { continue } + // 尝试:做出选择,更新状态 backtrack(choices: choices, state: state + choice, n: n, res: &res) + // 回退 } } diff --git a/docs/chapter_array_and_linkedlist/list.md b/docs/chapter_array_and_linkedlist/list.md index 10cb41275..f764bd501 100755 --- a/docs/chapter_array_and_linkedlist/list.md +++ b/docs/chapter_array_and_linkedlist/list.md @@ -379,10 +379,10 @@ nums.Add(4); /* 在中间插入元素 */ - nums.Insert(3, 6); + nums.Insert(3, 6); // 在索引 3 处插入数字 6 /* 删除元素 */ - nums.RemoveAt(3); + nums.RemoveAt(3); // 删除索引 3 处的元素 ``` === "Go" @@ -439,10 +439,10 @@ nums.push(4); /* 在中间插入元素 */ - nums.splice(3, 0, 6); + nums.splice(3, 0, 6); // 在索引 3 处插入数字 6 /* 删除元素 */ - nums.splice(3, 1); + nums.splice(3, 1); // 删除索引 3 处的元素 ``` === "TS" @@ -459,10 +459,10 @@ nums.push(4); /* 在中间插入元素 */ - nums.splice(3, 0, 6); + nums.splice(3, 0, 6); // 在索引 3 处插入数字 6 /* 删除元素 */ - nums.splice(3, 1); + nums.splice(3, 1); // 删除索引 3 处的元素 ``` === "Dart" diff --git a/docs/chapter_tree/array_representation_of_tree.md b/docs/chapter_tree/array_representation_of_tree.md index 87e077f19..e49c128d3 100644 --- a/docs/chapter_tree/array_representation_of_tree.md +++ b/docs/chapter_tree/array_representation_of_tree.md @@ -117,7 +117,7 @@ ```kotlin title="" /* 二叉树的数组表示 */ // 使用 null 来表示空位 - val tree = mutableListOf( 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 ) + val tree = arrayOf( 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 ) ``` === "Ruby"