zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 753 破解保险箱(递归)

    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);
        }
     
    }
    
  • 相关阅读:
    轨迹预测-运动递归函数
    Mandelbrot集合及其渲染
    如何检测一个圆在多个圆内?
    【转】三十分钟掌握STL
    【转】如何理解c和c++的复杂类型声明
    有1,2,3一直到n的无序数组,排序
    归并排序
    希尔排序
    快速排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074668.html
Copyright © 2011-2022 走看看