1009. 十进制整数的反码
This commit is contained in:
parent
f80a39e514
commit
e615d4f611
40
src/main.rs
40
src/main.rs
|
|
@ -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 {
|
|
||||||
dp[i][0][0] = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for i in 1..=zero as usize {
|
n.bitxor(a)
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue