LeetCode

LeetCode

  • Problems
  • GitHub

›Problems

Problems

  • Two Sum
  • Add Two Numbers
  • Longest Substring Without Repeating Characters
  • Reverse Integer
  • String to Integer (atoi)
  • Palindrome Number
  • Longest Common Prefix
  • 3Sum
  • Remove Nth Node From End of List
  • Valid Parentheses
  • Merge Two Sorted Lists
  • Generate Parentheses
  • Merge k Sorted Lists
  • Remove Element
  • Next Permutation
  • Search in Rotated Sorted Array
  • Valid Sudoku
  • Group Anagrams
  • Maximum Subarray
  • Search a 2D Matrix
  • Binary Tree Level Order Traversal
  • Maximum Depth of Binary Tree
  • Balanced Binary Tree
  • Best Time to Buy and Sell Stock
  • Binary Tree Maximum Path Sum
  • Valid Palindrome
  • Word Ladder
  • Longest Consecutive Sequence
  • Palindrome Partitioning II
  • Linked List Cycle
  • Find Minimum in Rotated Sorted Array
  • Two Sum II - Input Array Is Sorted
  • Number of Islands
  • Reverse Linked List
  • Course Schedule II
  • Kth Largest Element in an Array
  • Contains Duplicate
  • Count Complete Tree Nodes
  • Invert Binary Tree
  • Valid Anagram
  • Find the Duplicate Number
  • Count of Smaller Numbers After Self
  • Longest Increasing Path in a Matrix
  • Top K Frequent Elements
  • Decode String
  • Longest Repeating Character Replacement
  • Max Consecutive Ones
  • Cracking the Safe
  • Binary Search
  • Design Circular Queue
  • Robot Room Cleaner
  • Peak Index in a Mountain Array
  • Fruit Into Baskets
  • Sort Array By Parity II
  • Unique Email Addresses
  • K Closest Points to Origin
  • Squares of a Sorted Array
  • Remove Vowels from a String
  • Optimize Water Distribution in a Village
  • Duplicate Zeros
  • Defanging an IP Address
  • Find Numbers with Even Number of Digits
  • Shuffle the Array
  • Running Sum of 1d Array
  • Number of Good Pairs
  • Richest Customer Wealth
  • Build Array from Permutation
  • Concatenation of Array
  • Final Value of Variable After Performing Operations
  • Maximum Number of Words Found in Sentences
  • Add Two Integers
  • Intersection of Two Arrays
  • Missing Number
  • Jewels and Stones
  • Find a Corresponding Node of a Binary Tree in a Clone of That Tree
  • Kids With the Greatest Number of Candies
  • Design Parking System
  • Minimum Sum of Four Digit Number After Splitting Digits
  • Root Equals Sum of Children
  • Plus One
  • Validate Binary Search Tree
  • Find Pivot Index
  • Largest Number At Least Twice of Others
  • Range Sum of BST
  • Subtract the Product and Sum of Digits of an Integer
  • How Many Numbers Are Smaller Than the Current Number

Cracking the Safe

Description

There is a safe protected by a password. The password is a sequence of n digits where each digit can be in the range [0, k - 1].

The safe has a peculiar way of checking the password. When you enter in a sequence, it checks the most recent n digits that were entered each time you type a digit.

  • For example, the correct password is "345" and you enter in "012345":
    <ul>
        <li>After typing <code>0</code>, the most recent <code>3</code> digits is <code>&quot;0&quot;</code>, which is incorrect.</li>
        <li>After typing <code>1</code>, the most recent <code>3</code> digits is <code>&quot;01&quot;</code>, which is incorrect.</li>
        <li>After typing <code>2</code>, the most recent <code>3</code> digits is <code>&quot;012&quot;</code>, which is incorrect.</li>
        <li>After typing <code>3</code>, the most recent <code>3</code> digits is <code>&quot;123&quot;</code>, which is incorrect.</li>
        <li>After typing <code>4</code>, the most recent <code>3</code> digits is <code>&quot;234&quot;</code>, which is incorrect.</li>
        <li>After typing <code>5</code>, the most recent <code>3</code> digits is <code>&quot;345&quot;</code>, which is correct and the safe unlocks.</li>
    </ul>
    </li>
    

Return any string of minimum length that will unlock the safe at some point of entering it.

 

Example 1:

Input: n = 1, k = 2
Output: "10"
Explanation: The password is a single digit, so enter each digit. "01" would also unlock the safe.

Example 2:

Input: n = 2, k = 2
Output: "01100"
Explanation: For each possible password:
- "00" is typed in starting from the 4th digit.
- "01" is typed in starting from the 1st digit.
- "10" is typed in starting from the 3rd digit.
- "11" is typed in starting from the 2nd digit.
Thus "01100" will unlock the safe. "01100", "10011", and "11001" would also unlock the safe.

 

Constraints:

  • 1 <= n <= 4
  • 1 <= k <= 10
  • 1 <= kn <= 4096

Solution(javascript)

/**
 * @param {number} n
 * @param {number} k
 * @return {string}
 */
var crackSafe = function(n, k) {
    let seen = new Set();
    let ans = [];
    
    const dfs = (node, k) => {
        for (let x = 0; x < k; ++x) {
            const nei = node + x;
            if (!seen.has(nei)) {
                seen.add(nei);
                dfs(nei.slice(1), k);
                ans.push(x);
            }
        }
    };
    
    if (n == 1 && k == 1) {
        return "0";
    }
    
    seen = new Set();
    ans = [];

    const sb = [];
    for (let i = 0; i < n-1; ++i) {
        sb.push("0");
    }
    
    const start = sb.join('');
    dfs(start, k);
    ans.push(start);
    return ans.join('');
};
← Max Consecutive OnesBinary Search →
  • Description
  • Solution(javascript)
Powered By LeetCode Site Generator