Java實現 LeetCode 753 破解保險箱(遞歸)

753. 破解保險箱

有一個須要密碼才能打開的保險箱。密碼是 n 位數, 密碼的每一位是 k 位序列 0, 1, …, k-1 中的一個 。java

你能夠隨意輸入密碼,保險箱會自動記住最後 n 位輸入,若是匹配,則可以打開保險箱。app

舉個例子,假設密碼是 「345」,你能夠輸入 「012345」 來打開它,只是你輸入了 6 個字符.ide

請返回一個能打開保險箱的最短字符串。ui

示例1:spa

輸入: n = 1, k = 2
輸出: 「01」
說明: "10"也能夠打開保險箱。翻譯

示例2:code

輸入: n = 2, k = 2
輸出: 「00110」
說明: 「01100」, 「10011」, 「11001」 也能打開保險箱。字符串

提示:get

n 的範圍是 [1, 4]。
k 的範圍是 [1, 10]。
k^n 最大可能爲 4096。it

PS:
該說不說,百度翻譯都比這個強

class Solution {
   public static final int[] MASK = {0, 1, 10, 100, 1000};
    public String crackSafe(int n, int k) {
        M = MASK[n];
        StringBuilder sb = new StringBuilder();
        Hierholzer(0, k, new BitSet(), sb);
        for (int i = 0; i < n - 1; i++) sb.append(0);
        return sb.toString();
    }

    public int M;
    public void Hierholzer(int n, int k, BitSet bs, StringBuilder sb) {
        bs.set(n);
        int tail = n % 10;
        n = (n % M) * 10;
        for (int i = 0; i < k; i++, n++) {
            if (!bs.get(n)) Hierholzer(n, k, bs, sb);
        }
        sb.append(tail);
    }
 
}

753. 破解保險箱

有一個須要密碼才能打開的保險箱。密碼是 n 位數, 密碼的每一位是 k 位序列 0, 1, …, k-1 中的一個 。

你能夠隨意輸入密碼,保險箱會自動記住最後 n 位輸入,若是匹配,則可以打開保險箱。

舉個例子,假設密碼是 「345」,你能夠輸入 「012345」 來打開它,只是你輸入了 6 個字符.

請返回一個能打開保險箱的最短字符串。

示例1:

輸入: n = 1, k = 2
輸出: 「01」
說明: "10"也能夠打開保險箱。

示例2:

輸入: n = 2, k = 2
輸出: 「00110」
說明: 「01100」, 「10011」, 「11001」 也能打開保險箱。

提示:

n 的範圍是 [1, 4]。
k 的範圍是 [1, 10]。
k^n 最大可能爲 4096。

PS:
該說不說,百度翻譯都比這個強

class Solution {
   public static final int[] MASK = {0, 1, 10, 100, 1000};
    public String crackSafe(int n, int k) {
        M = MASK[n];
        StringBuilder sb = new StringBuilder();
        Hierholzer(0, k, new BitSet(), sb);
        for (int i = 0; i < n - 1; i++) sb.append(0);
        return sb.toString();
    }

    public int M;
    public void Hierholzer(int n, int k, BitSet bs, StringBuilder sb) {
        bs.set(n);
        int tail = n % 10;
        n = (n % M) * 10;
        for (int i = 0; i < k; i++, n++) {
            if (!bs.get(n)) Hierholzer(n, k, bs, sb);
        }
        sb.append(tail);
    }
 
}
相關文章
相關標籤/搜索