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

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:
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
học lại thêm 1 lần nữa, cho thấm nhuần tư tưởng của culi lập trình. chứ mấy bài giải cần ví dù hồi xưa năm 96 lớp 12 tao mới tiếp xúc với máy tính học pascal, nhưng học lập trình để làm gì, đề bài xưa tao nhớ thầy cô trong trong cho để làm quen là dùng pascal để nhập x,y,z gì để giải phương trình bậc 3... ví dụ vậy. thì con nít lớp 5 sao nó hiểu được. Tốt nhất để nó nhuần nhuyễn các định nghĩa đã. theo ý tao như vậy.
 
gặp test case khoai quá bỏ ngang luôn (3 hình chữ nhật cắt nhau hình chữ H) :vozvn (3):
Mày phải nghĩ ra giải thuật tổng quát, nghĩ ra các edge case để couter chính cái thuật toán của mày. Lúc đó thấy ổn rồi mới code, chứ bay vô code liền rồi xai thì rất nản đéo muốn code lại nữa
 
Top