找出只出现一次的数字
班级里每位同学都有一张写着整数的卡片。除了一个数字只出现一次,其余数字都恰好出现两次。目标是快速找出这个只出现一次的数字。
这类题可以直接用异或解决:相同数字异或后会抵消,最后剩下的就是只出现一次的数字。
fn solution(inp: Vec<i32>) -> i32 {
let mut result = 0;
for i in inp.iter() {
result = result ^ i;
}
result
}
统计数字分组中的偶数和组合
给定若干个数字组,每个数字组由 1 到 9 之间的数字组成。需要从每个组里选择一个数字,拼成一个新数,并统计有多少种选择方式能让各位数字之和为偶数。
numbers 是一个整数数组,每个整数可以看作一个数字组。比如 [123, 456, 789] 表示三组数字: 1/2/3 、 4/5/6 、 7/8/9 。
对于 [123, 456, 789] ,符合条件的组合共有 14 个:
147 149 158 167 169 248 257 259 268 347 349 358 367 369
fn solution(numbers: &[i32]) -> i32 {
let mut groups = Vec::new();
for num in numbers.iter() {
let chats_arr: Vec<i32> = num
.to_string()
.chars()
.map(|c| c.to_digit(10).unwrap() as i32)
.collect::<Vec<i32>>();
groups.push(chats_arr);
}
fn calc_nums(group: &Vec<Vec<i32>>, index: usize, current_sum: i32, count: &mut i32) {
if index == group.len() {
if current_sum % 2 == 0 {
*count = *count + 1;
}
return;
}
for &num in group[index].iter() {
calc_nums(group, index + 1, num + current_sum, count);
}
}
let mut count = 0;
calc_nums(&mut groups, 0, 0, &mut count);
return count;
}