1009. 十进制整数的反码

This commit is contained in:
li_chx 2026-03-11 08:47:20 +08:00
parent f80a39e514
commit e615d4f611
Signed by: li_chx
GPG Key ID: 70D4985BB8180E92
1 changed files with 8 additions and 32 deletions

View File

@ -1,44 +1,20 @@
use std::ops::BitXor;
struct Solution;
mod arr;
impl Solution {
pub fn number_of_stable_arrays(zero: i32, one: i32, limit: i32) -> i32 {
let md = 1e9 as i64 + 7;
let mut dp = vec![vec![vec![0; 2]; one as usize + 1]; zero as usize + 1];
for i in 1..=limit as usize {
if i <= one as usize {
dp[0][i][1] = 1;
pub fn bitwise_complement(n: i32) -> i32 {
let mut a = 1;
for i in 1.. n.count_ones() + n.count_zeros() - n.leading_zeros() {
a |= 1 << i;
}
if i <= zero as usize {
dp[i][0][0] = 1;
}
}
for i in 1..=zero as usize {
for j in 1..=one as usize {
dp[i][j][0] = (((dp[i - 1][j][0] + dp[i - 1][j][1]
- if i as i32 - limit - 1 >= 0 {
dp[i - limit as usize - 1][j][1]
} else {
0
}) as i64
+ md)
% md) as i32;
dp[i][j][1] = (((dp[i][j - 1][0] + dp[i][j - 1][1]
- if j as i32 - limit - 1 >= 0 {
dp[i][j - limit as usize - 1][0]
} else {
0
}) as i64
+ md)
% md) as i32;
}
}
((dp[zero as usize][one as usize][0] as i64 + dp[zero as usize][one as usize][1] as i64) % md) as i32
n.bitxor(a)
}
}
fn main() {
let result = Solution::number_of_stable_arrays(39, 20, 18);
let result = Solution::bitwise_complement(0);
// let result = Solution::number_of_stable_arrays(200, 200, 25);
println!("{:?}", result);
}