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;
|
||||
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;
|
||||
}
|
||||
if i <= zero as usize {
|
||||
dp[i][0][0] = 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;
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue