[Python3/Java/C++/Go/TypeScript] 一题一解:脑筋急转弯(清晰题解)
方法一:脑筋急转弯
由于编号为 $0$ 的计算机密码已经被解锁,那么对于其他计算机 $i$,如果存在 $\text{complexity}[i] \leq \text{complexity}[0]$,则无法解锁计算机 $i$,因此返回 $0$。否则,排列可以是任意的,一共有 $(n - 1)!$ 种排列方式。
###python
class Solution:
def countPermutations(self, complexity: List[int]) -> int:
mod = 10**9 + 7
ans = 1
for i in range(1, len(complexity)):
if complexity[i] <= complexity[0]:
return 0
ans = ans * i % mod
return ans
###java
class Solution {
public int countPermutations(int[] complexity) {
final int mod = (int) 1e9 + 7;
long ans = 1;
for (int i = 1; i < complexity.length; ++i) {
if (complexity[i] <= complexity[0]) {
return 0;
}
ans = ans * i % mod;
}
return (int) ans;
}
}
###cpp
class Solution {
public:
int countPermutations(vector<int>& complexity) {
const int mod = 1e9 + 7;
long long ans = 1;
for (int i = 1; i < complexity.size(); ++i) {
if (complexity[i] <= complexity[0]) {
return 0;
}
ans = ans * i % mod;
}
return ans;
}
};
###go
func countPermutations(complexity []int) int {
mod := int64(1e9 + 7)
ans := int64(1)
for i := 1; i < len(complexity); i++ {
if complexity[i] <= complexity[0] {
return 0
}
ans = ans * int64(i) % mod
}
return int(ans)
}
###ts
function countPermutations(complexity: number[]): number {
const mod = 1e9 + 7;
let ans = 1;
for (let i = 1; i < complexity.length; i++) {
if (complexity[i] <= complexity[0]) {
return 0;
}
ans = (ans * i) % mod;
}
return ans;
}
###rust
impl Solution {
pub fn count_permutations(complexity: Vec<i32>) -> i32 {
const MOD: i64 = 1_000_000_007;
let mut ans = 1i64;
for i in 1..complexity.len() {
if complexity[i] <= complexity[0] {
return 0;
}
ans = ans * i as i64 % MOD;
}
ans as i32
}
}
时间复杂度 $O(n)$,其中 $n$ 是数组 $\text{complexity}$ 的长度。空间复杂度 $O(1)$。
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈 😄~