• 🚀 Đăng ký ngay để không bỏ lỡ những nội dung chất lượng! 💯 Hoàn toàn miễn phí!

Có Video Toán và thuật toán mỗi ngày

trả bài đây, bài này khó ra phết đấy
Python:
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m = len(word1)
        n = len(word2)
        dp = [[0] * (m+1) for _ in range(n+1)]
        for i in range(m+1):
            dp[0][i] = i
        for i in range(n+1):
            dp[i][0] = i
        for i in range(1,n+1,1):
            for j in range(1,m+1,1):
                if word1[j-1] == word2[i-1]:
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j] = 1+ min(dp[i][j-1], dp[i-1][j-1], dp[i-1][j])
        return dp[n][m]
bài nào khó cũng có cái nghệ thuật trong đó. Bài này tao sẽ giải thích cách làm trước khi code
 
Python:
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m = len(word1) # row
        n = len(word2) # col
        dp = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
        for i in range(n + 1):
            dp[0][i] = i
        for i in range(m + 1):
            dp[i][0] = i
        for i in range(m):
            for j in range(n):
                id = i + 1
                jd = j + 1
                if word1[i] != word2[j]:
                    dp[id][jd] = min(dp[id-1][jd-1], dp[id][jd - 1], dp[id - 1][jd]) + 1
                else:
                    dp[id][jd] = dp[id - 1][jd - 1]
        return dp[m][n]
Tao có giải thích thuật toán ở đây. Làm cả ngày hơi mệt nên nếu tao giải thích ko hiểu thì hỏi tao chỉ thêm @LQDuy2 @sangnguyen112233 @vô danh tiểu tốt @Kengoc2018
 
Solution bài 10. Nếu code DP nhiều thì bài này thuộc dạng dễ (dễ tìm công thức), ý tưởng là nếu thêm một số mới thì hoặc nó sẽ có thể đứng 1 mình hoặc nó chập với số kế tiếp để tạo ra số mới @LQDuy2 @sangnguyen112233 @vô danh tiểu tốt @Kengoc2018
Python:
class Solution:
    def numDecodings(self, s: str) -> int:
        if len(s) == 1:
            if s[0] == "0":
                return 0
            return 1
        dp = [0 for _ in range(len(s) + 1)]
        dp[0] = 1
        for i in range(len(s)):
            id = i + 1
            if s[i] != "0":
                dp[id] = dp[id - 1]
            if i > 0:
                twoDigit = int(s[i-1] + s[i])
                if 10 <= twoDigit <= 26:
                    dp[id] += dp[id-2]
        return dp[len(s)]
 
Sửa lần cuối:
đm một bài hard đội lốt medium. Để mai giải, giờ phải học bài đã
Góp 1 bài
Code:
func numTrees(n int) int {
    memo := make(map[int]int)
    return countTree(n, memo)
}

func countTree(n int, memo map[int]int) int {
    if n == 0 || n == 1 {
        return 1
    }
    count := 0
    for i := 1; i <= n; i++ {
        if _, exists := memo[i-1]; !exists {
            memo[i-1] = countTree(i-1, memo)
        }
        if _, exists := memo[n-i]; !exists {
            memo[n-i] = countTree(n-i, memo)
        }
        count += memo[i-1] * memo[n-i]
    }
    return count
}
 
Muốn cho trẻ con học lập trình thì bắt đầu từ đâu hả mấy tml, tầm lớp 5 thì học ở đâu uy tín
 
Muốn cho trẻ con học lập trình thì bắt đầu từ đâu hả mấy tml, tầm lớp 5 thì học ở đâu uy tín
Lớp 5 học cái strach cho nó hiểu biến,hàm, lệnh, hành động là gì. Coi phù hợp ko. Lên lớp 9 có đam mê thì đào sâu hơn thay vì giải toán thì viết tool trên Visual Studio để nó biết.
 
Lớp 5 học cái strach cho nó hiểu biến,hàm, lệnh, hành động là gì. Coi phù hợp ko. Lên lớp 9 có đam mê thì đào sâu hơn thay vì giải toán thì viết tool trên Visual Studio để nó biết.
học scratch từ lớp 2 rồi mài. Sau đấy học tiếp lên thì học cái gì nhỉ, tài liệu hay trang web tự học ở đâu hả mày, có gì chia sẻ t với
 
Solution bài 11, Bài này khá hay. Ý tưởng cơ bản là nếu chọn 1 node làm root thì BST của root đó bằng bên trái nhân với bên phải, bài này tao tham khảo chứ éo tự giả đc
Python:
class Solution:
    def numTrees(self, n: int) -> int:
        dp = [0 for _ in range(n + 1)]
        dp[0], dp[1] = 1, 1
        for i in range(2, n + 1):
            for j in range(1, i + 1):
                dp[i] += dp[j-1] * dp[i - j]
        return dp[n]
 
solution bài 12, bài này căn bản là từ một điểm rồi trải rộng ra bên trái xa nhất có thể, và bên phải xa nhất có thể, và cao nhất có thể rồi dùng nó tính diện tích. Trò này tao gặp khá nhiều ở một số bài khác, thường nó sẽ chèn 1 số cấu trúc dữ liệu vào như BITtree, segmentTree để buộc mình phải biết sử dụng ctruc dữ liệu đó + thêm phương pháp kia, từ đó tạo ra 1 bài khoai hơn @LQDuy2 @sangnguyen112233 @vô danh tiểu tốt @Kengoc2018 @xamlong9
Python:
class Solution:
    def maximalRectangle(self, matrix: List[List[str]]) -> int:
        if not matrix or not matrix[0]:
            return 0
        row, col = len(matrix), len(matrix[0])
        height = [0] * col
        left = [0] * col
        right = [col] * col # điểm phải xa nhất mặc định là = len of col
        max_area = 0
        for i in range(row):
            currentLeft, currentRight = 0, col
            for j in range(col):
                if matrix[i][j] == '1':
                    height[j] += 1
                else:
                    height[j] = 0
            for j in range(col):
                if matrix[i][j] == '1':
                    left[j] = max(left[j], currentLeft) # tracking điểm 0
                else:
                    left[j] = 0
                    currentLeft = j + 1 # skip current left
            for j in range(col - 1, -1, -1): # -1 including index 0
                if matrix[i][j] == '1':
                    right[j] = min(right[j], currentRight) # righ gan nhat
                else:
                    right[j] = col # reset right
                    currentRight = j # col = 5, j = 4, ko cần j - 1
            for j in range(col):
                max_area = max(max_area, (right[j] - left[j])*height[j])
        return max_area
 
Sửa lần cuối:

Có thể bạn quan tâm

Top