mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 22:28:40 +08:00 
			
		
		
		
	refactor: use Package.swift to define executable task
This commit is contained in:
		
							
								
								
									
										18
									
								
								codes/swift/Package.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								codes/swift/Package.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
// swift-tools-version: 5.7
 | 
			
		||||
 | 
			
		||||
import PackageDescription
 | 
			
		||||
 | 
			
		||||
let package = Package(
 | 
			
		||||
    name: "HelloAlgo",
 | 
			
		||||
    products: [
 | 
			
		||||
        .executable(name: "time_complexity", targets: ["time_complexity"]),
 | 
			
		||||
        .executable(name: "worst_best_time_complexity", targets: ["worst_best_time_complexity"]),
 | 
			
		||||
        .executable(name: "space_complexity", targets: ["space_complexity"]),
 | 
			
		||||
    ],
 | 
			
		||||
    targets: [
 | 
			
		||||
        .target(name: "utils", path: "utils"),
 | 
			
		||||
        .executableTarget(name: "time_complexity", path: "chapter_computational_complexity", sources: ["time_complexity.swift"]),
 | 
			
		||||
        .executableTarget(name: "worst_best_time_complexity", path: "chapter_computational_complexity", sources: ["worst_best_time_complexity.swift"]),
 | 
			
		||||
        .executableTarget(name: "space_complexity", dependencies: ["utils"], path: "chapter_computational_complexity", sources: ["space_complexity.swift"]),
 | 
			
		||||
    ]
 | 
			
		||||
)
 | 
			
		||||
@ -4,82 +4,7 @@
 | 
			
		||||
 * Author: nuomi1 (nuomi1@qq.com)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class ListNode {
 | 
			
		||||
    var val: Int
 | 
			
		||||
    var next: ListNode?
 | 
			
		||||
 | 
			
		||||
    init(x: Int) {
 | 
			
		||||
        val = x
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class TreeNode {
 | 
			
		||||
    var val: Int // 结点值
 | 
			
		||||
    var height: Int // 结点高度
 | 
			
		||||
    var left: TreeNode? // 左子结点引用
 | 
			
		||||
    var right: TreeNode? // 右子结点引用
 | 
			
		||||
 | 
			
		||||
    init(x: Int) {
 | 
			
		||||
        val = x
 | 
			
		||||
        height = 0
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum PrintUtil {
 | 
			
		||||
    private class Trunk {
 | 
			
		||||
        var prev: Trunk?
 | 
			
		||||
        var str: String
 | 
			
		||||
 | 
			
		||||
        init(prev: Trunk?, str: String) {
 | 
			
		||||
            self.prev = prev
 | 
			
		||||
            self.str = str
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static func printTree(root: TreeNode?) {
 | 
			
		||||
        printTree(root: root, prev: nil, isLeft: false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static func printTree(root: TreeNode?, prev: Trunk?, isLeft: Bool) {
 | 
			
		||||
        if root == nil {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var prevStr = "    "
 | 
			
		||||
        let trunk = Trunk(prev: prev, str: prevStr)
 | 
			
		||||
 | 
			
		||||
        printTree(root: root?.right, prev: trunk, isLeft: true)
 | 
			
		||||
 | 
			
		||||
        if prev == nil {
 | 
			
		||||
            trunk.str = "———"
 | 
			
		||||
        } else if isLeft {
 | 
			
		||||
            trunk.str = "/———"
 | 
			
		||||
            prevStr = "   |"
 | 
			
		||||
        } else {
 | 
			
		||||
            trunk.str = "\\———"
 | 
			
		||||
            prev?.str = prevStr
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        showTrunks(p: trunk)
 | 
			
		||||
        print(" \(root!.val)")
 | 
			
		||||
 | 
			
		||||
        if prev != nil {
 | 
			
		||||
            prev?.str = prevStr
 | 
			
		||||
        }
 | 
			
		||||
        trunk.str = "   |"
 | 
			
		||||
 | 
			
		||||
        printTree(root: root?.left, prev: trunk, isLeft: false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static func showTrunks(p: Trunk?) {
 | 
			
		||||
        if p == nil {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        showTrunks(p: p?.prev)
 | 
			
		||||
        print(p!.str, terminator: "")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
import utils
 | 
			
		||||
 | 
			
		||||
// 函数
 | 
			
		||||
@discardableResult
 | 
			
		||||
@ -153,8 +78,10 @@ func buildTree(n: Int) -> TreeNode? {
 | 
			
		||||
    return root
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Driver Code
 | 
			
		||||
func main() {
 | 
			
		||||
@main
 | 
			
		||||
enum SpaceComplexity {
 | 
			
		||||
    // Driver Code
 | 
			
		||||
    static func main() {
 | 
			
		||||
        let n = 5
 | 
			
		||||
        // 常数阶
 | 
			
		||||
        constant(n: n)
 | 
			
		||||
@ -167,6 +94,5 @@ func main() {
 | 
			
		||||
        // 指数阶
 | 
			
		||||
        let root = buildTree(n: n)
 | 
			
		||||
        PrintUtil.printTree(root: root)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
 | 
			
		||||
@ -131,7 +131,9 @@ func factorialRecur(n: Int) -> Int {
 | 
			
		||||
    return count
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
@main
 | 
			
		||||
enum TimeComplexity {
 | 
			
		||||
    static func main() {
 | 
			
		||||
        // 可以修改 n 运行,体会一下各种复杂度的操作数量变化趋势
 | 
			
		||||
        let n = 8
 | 
			
		||||
        print("输入数据大小 n =", n)
 | 
			
		||||
@ -165,6 +167,5 @@ func main() {
 | 
			
		||||
 | 
			
		||||
        count = factorialRecur(n: n)
 | 
			
		||||
        print("阶乘阶(递归实现)的计算操作数量 =", count)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
 | 
			
		||||
@ -23,8 +23,10 @@ func findOne(nums: [Int]) -> Int {
 | 
			
		||||
    return -1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Driver Code
 | 
			
		||||
func main() {
 | 
			
		||||
@main
 | 
			
		||||
enum WorstBestTimeComplexity {
 | 
			
		||||
    // Driver Code
 | 
			
		||||
    static func main() {
 | 
			
		||||
        for _ in 0 ..< 10 {
 | 
			
		||||
            let n = 100
 | 
			
		||||
            let nums = randomNumbers(n: n)
 | 
			
		||||
@ -32,6 +34,5 @@ func main() {
 | 
			
		||||
            print("数组 [ 1, 2, ..., n ] 被打乱后 =", nums)
 | 
			
		||||
            print("数字 1 的索引为", index)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								codes/swift/utils/ListNode.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								codes/swift/utils/ListNode.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: ListNode.swift
 | 
			
		||||
 * Created Time: 2023-01-02
 | 
			
		||||
 * Author: nuomi1 (nuomi1@qq.com)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class ListNode {
 | 
			
		||||
    public var val: Int // 结点值
 | 
			
		||||
    public var next: ListNode? // 后继结点引用
 | 
			
		||||
 | 
			
		||||
    public init(x: Int) {
 | 
			
		||||
        val = x
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								codes/swift/utils/PrintUtil.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								codes/swift/utils/PrintUtil.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,61 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: PrintUtil.swift
 | 
			
		||||
 * Created Time: 2023-01-02
 | 
			
		||||
 * Author: nuomi1 (nuomi1@qq.com)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public enum PrintUtil {
 | 
			
		||||
    private class Trunk {
 | 
			
		||||
        var prev: Trunk?
 | 
			
		||||
        var str: String
 | 
			
		||||
 | 
			
		||||
        init(prev: Trunk?, str: String) {
 | 
			
		||||
            self.prev = prev
 | 
			
		||||
            self.str = str
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static func printTree(root: TreeNode?) {
 | 
			
		||||
        printTree(root: root, prev: nil, isLeft: false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static func printTree(root: TreeNode?, prev: Trunk?, isLeft: Bool) {
 | 
			
		||||
        if root == nil {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var prevStr = "    "
 | 
			
		||||
        let trunk = Trunk(prev: prev, str: prevStr)
 | 
			
		||||
 | 
			
		||||
        printTree(root: root?.right, prev: trunk, isLeft: true)
 | 
			
		||||
 | 
			
		||||
        if prev == nil {
 | 
			
		||||
            trunk.str = "———"
 | 
			
		||||
        } else if isLeft {
 | 
			
		||||
            trunk.str = "/———"
 | 
			
		||||
            prevStr = "   |"
 | 
			
		||||
        } else {
 | 
			
		||||
            trunk.str = "\\———"
 | 
			
		||||
            prev?.str = prevStr
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        showTrunks(p: trunk)
 | 
			
		||||
        print(" \(root!.val)")
 | 
			
		||||
 | 
			
		||||
        if prev != nil {
 | 
			
		||||
            prev?.str = prevStr
 | 
			
		||||
        }
 | 
			
		||||
        trunk.str = "   |"
 | 
			
		||||
 | 
			
		||||
        printTree(root: root?.left, prev: trunk, isLeft: false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static func showTrunks(p: Trunk?) {
 | 
			
		||||
        if p == nil {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        showTrunks(p: p?.prev)
 | 
			
		||||
        print(p!.str, terminator: "")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								codes/swift/utils/TreeNode.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								codes/swift/utils/TreeNode.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: TreeNode.swift
 | 
			
		||||
 * Created Time: 2023-01-02
 | 
			
		||||
 * Author: nuomi1 (nuomi1@qq.com)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class TreeNode {
 | 
			
		||||
    public var val: Int // 结点值
 | 
			
		||||
    public var height: Int // 结点高度
 | 
			
		||||
    public var left: TreeNode? // 左子结点引用
 | 
			
		||||
    public var right: TreeNode? // 右子结点引用
 | 
			
		||||
 | 
			
		||||
    public init(x: Int) {
 | 
			
		||||
        val = x
 | 
			
		||||
        height = 0
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user