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