thảo luận Leetcode mỗi ngày

  • Người tạo chủ đề Người tạo chủ đề _Gia_Cat_Luong_
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Bài Hard mà cũng ko Hard lắm. Kha khá giống cái bài mấy hôm trước
JavaScript:
function strangePrinter(s: string) {
    let dp = Array(s.length + 1).fill(null).map(a => Array(s.length + 1).fill(-1));

    const go = (l, r) => {
        if (dp[l][r] > -1) return dp[l][r]
        if (l == r) return 1;
        else if (l > r) return 0;

        const target = s[l];
        let ans = s.length;
        for (let i = l; i <= r; i++) {
            if (s[i] === target) {
                if (i == l) {
                    ans = 1 + go(l + 1, r);
                } else {
                    ans = Math.min(ans, go(l, i - 1) + go(i + 1, r));
                }
            }
        }
        dp[l][r] = ans;
        return ans;
    };

    return go(0, s.length - 1)
};
 
1xEuo02.gif
Ngại quá, cơm cũ trư ăn chưa hết, tầm hơn chục bài
jbJjmTi.png
Dạo này phân tâm quá để hôm nay trư ăn hết
 
Bài Hard mà cũng ko Hard lắm. Kha khá giống cái bài mấy hôm trước
JavaScript:
function strangePrinter(s: string) {
    let dp = Array(s.length + 1).fill(null).map(a => Array(s.length + 1).fill(-1));

    const go = (l, r) => {
        if (dp[l][r] > -1) return dp[l][r]
        if (l == r) return 1;
        else if (l > r) return 0;

        const target = s[l];
        let ans = s.length;
        for (let i = l; i <= r; i++) {
            if (s[i] === target) {
                if (i == l) {
                    ans = 1 + go(l + 1, r);
                } else {
                    ans = Math.min(ans, go(l, i - 1) + go(i + 1, r));
                }
            }
        }
        dp[l][r] = ans;
        return ans;
    };

    return go(0, s.length - 1)
};
Ad8fHwT.png
hard tiếng anh dịch là khó mà bác này bảo không khó
MeEmGOg.png
Bác này trình kinh thật, phá đảo cả định nghĩa tiếng anh
UKiCiKh.png
 
Làm mấy bài dp này lúc đọc solve thì vui chứ lúc tự giải thì mệt phết, toàn bị dính mấy cái test case ở biên nhiều với thỉnh thoảng tư duy sai nhưng không biết sai ở đâu, lại phải ngồi debug từng đoạn để tìm chỗ mình tư duy sai.
 
bài này trước cũng làm rồi , dùng dp để tìm số lượng tối thiểu các lần in cần thiết để in chuỗi s, bằng cách tính toán số lượng lần in cần thiết cho mỗi đoạn con của chuỗi và lưu trữ kết quả trong một mảng 2 chiều dp.
JavaScript:
function strangePrinter(s: string): number {
    const n = s.length;
    const dp: number[][] = Array.from({ length: n }, () => new Array(n).fill(0));

    for (let i = n - 1; i >= 0; i--) {
        dp[i][i] = 1;
        for (let j = i + 1; j < n; j++) {
            dp[i][j] = dp[i + 1][j] + 1;
            for (let k = i + 1; k <= j; k++) {
                if (s[i] === s[k]) {
                    dp[i][j] = Math.min(dp[i][j], dp[i][k - 1] + (k === j ? 0 : dp[k + 1][j]));
                }
            }
        }
    }

    return dp[0][n - 1];
}
 
Làm mấy bài dp này lúc đọc solve thì vui chứ lúc tự giải thì mệt phết, toàn bị dính mấy cái test case ở biên nhiều với thỉnh thoảng tư duy sai nhưng không biết sai ở đâu, lại phải ngồi debug từng đoạn để tìm chỗ mình tư duy sai.
đọc sol ra luôn cái công thức rồi mà bác , bài nào mà đọc sol k hiểu nữa thì thôi bỏ
FY7e6U1.png
 
Bài hôm nay thua, code ko ra, ko biết làm =((
Biết xử lí từ start tới end rồi mà ko biết viết state transition như thế nào :ah:
 
Ví dụ số 8 sao lại là true được nhỉ
Java:
class Solution {
    public boolean judgeSquareSum(int c) {
        Set<Integer> set = new HashSet<>();

        for (int i = 0; i <= Math.sqrt(c); i++) {
            set.add(i*i);
            if (set.contains(c - i * i)) return true;
        }

        return false;
    }
}
Cũng là O(n) mà sao beat có 5% à :beat_brick:
nó bị lâu ở chỗ Add với Contains đó thím Đôn @Ung Thư Gan
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
_Gia_Cat_Luong_,
Người trả lời cuối
Vipluckystar,
Trả lời
17.755
Lượt xem
1.212.589
Quay lại
Lên đầu trang