LeetCode - #62 다른 경로(상위 100)

함께 쓰는 습관을 들이세요! "너겟 데일리 뉴 플랜 · 4월 업데이트 챌린지" 참여 7일차입니다. 클릭하시면 이벤트 내용을 보실 수 있습니다 .

머리말

이 질문은 LeetCode의 상위 100개 고주파 질문입니다.

우리 커뮤니티는 Gu Yi( Netflix Growth Hacker, "The Way of the iOS 인터뷰" 저자, ACE Professional Fitness Coach. )의 Swift 알고리즘 문제 솔루션을 모든 사람이 배우고 읽을 수 있도록 텍스트 버전으로 구성할 것입니다.

현재까지 62개 문제에 대해 LeetCode 알고리즘을 업데이트했으며 업데이트 시간과 진행 상황( 월, 수, 금 오전 9시 공개)을 유지 하며, 큰 개선이 있을 것입니다.

작은 걸음이 쌓이지 않으면 천 마일도 갈 수 없고, 작은 시냇물이 쌓이지 않으면 강이 될 수 없습니다. Swift 커뮤니티가 함께 합니다. 제안 및 의견이 있는 경우 기사 끝에 메시지를 남겨주세요. 귀하의 요구 사항을 충족하기 위해 최선을 다할 것입니다.

난이도: 중

1. 설명

로봇은 m x n그리드 (시작점은 아래 이미지에서 "시작"으로 표시됨).

로봇은 한 번에 한 단계 아래로 또는 오른쪽으로만 이동할 수 있습니다. 로봇은 그리드의 오른쪽 하단 모서리에 도달하려고 시도합니다(아래 이미지에서 "마침"으로 표시됨).

Q 총 몇 개의 다른 경로가 있습니까?

2. 예

실시예 1

输入:m = 3, n = 7
输出:28
复制代码

실시예 2

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下
复制代码

실시예 3

输入:m = 7, n = 3
输出:28
复制代码

실시예 4

输入:m = 3, n = 3
输出:6
复制代码

제한:

  • 1 <= m, n <= 100
  • 질문 데이터는 답변이 다음보다 작거나 같음을 보장합니다.2 * 10^9

3. 답변

class UniquePaths {
    func uniquePaths(m: Int, _ n: Int) -> Int {
        var pathNums = Array(count: m, repeatedValue: Array(count: n, repeatedValue: 0))
        return _helper(&pathNums, m - 1, n - 1)
    }
    
    private func _helper(inout pathNums: [[Int]], _ m: Int, _ n: Int) -> Int {
        if m < 0 || n < 0 {
            return 0
        }
        if m == 0 || n == 0 {
            return 1
        }
        
        if pathNums[m][n] != 0 {
            return pathNums[m][n]
        }
        pathNums[m][n] = _helper(&pathNums, m - 1, n) + _helper(&pathNums, m, n - 1)
        
        return pathNums[m][n]
    }
}
复制代码
  • 주요 아이디어: 2D 배열을 캐시로 사용하여 계산 데이터를 저장하는 2D 동적 프로그래밍.
  • 시간 복잡도: O(백만)
  • 공간 복잡도: O(백만)

알고리즘 솔루션을 위한 저장소: LeetCode-Swift

클릭하면 LeetCode 실습 으로 이동합니다.

우리에 대해

Swift 매니아들이 공동으로 관리하고 있으며, Swift 전투, SwiftUI, Swift 기반을 중심으로 기술적인 내용을 공유하고, 우수한 학습 자료도 정리하여 수집합니다.

앞으로 저희 공식 계정에도 많은 정보가 번역될 예정이니 관심 있으신 분들은 많은 참여 부탁드립니다.

추천

출처juejin.im/post/7084956779561353246