[LeetCode] Count the Number of Computer Unlocking Permutations

3577. Count the Number of Computer Unlocking Permutations

You are given an array complexity of length n.

There are n locked computers in a room with labels from 0 to n - 1, each with its own unique password. The password of the computer i has a complexity complexity[i].

The password for the computer labeled 0 is already decrypted and serves as the root. All other computers must be unlocked using it or another previously unlocked computer, following this information:

  • You can decrypt the password for the computer i using the password for computer j, where j is any integer less than i with a lower complexity. (i.e. j < i and complexity[j] < complexity[i])
  • To decrypt the password for computer i, you must have already unlocked a computer j such that j < i and complexity[j] < complexity[i].

Find the number of permutations of [0, 1, 2, ..., (n - 1)] that represent a valid order in which the computers can be unlocked, starting from computer 0 as the only initially unlocked one.

Since the answer may be large, return it modulo 109 + 7.

Note that the password for the computer with label 0 is decrypted, and not the computer with the first position in the permutation.

A permutation is a rearrangement of all the elements of an array.

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
int countPermutations(vector<int>& complexity) {
long long mod = 1e9 + 7, res = 1;
for(int i = 1; i < complexity.size(); i++) {
if(complexity[i] <= complexity[0]) return 0;
res = res * i % mod;
}
return res;
}
};

Author: Song Hayoung
Link: https://songhayoung.github.io/2025/06/08/PS/LeetCode/count-the-number-of-computer-unlocking-permutations/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.