pub fn is_palindrome(number: i32) -> bool {
alg_2(number)
}
#[allow(dead_code)]
fn alg_1(mut number: i32) -> bool {
if number < 0 {
return false;
}
let mut temp: Vec<i32> = vec![];
while number >= 10 {
temp.push(number % 10);
if number >= 10 {
number = number / 10;
}
}
temp.push(number);
if temp.len() == 2 {
return temp[0] == temp[1];
}
let mut idx_start = 0;
let mut idx_end = temp.len() - 1;
loop {
if idx_end == idx_start {
return true;
}
if idx_end - idx_start == 1 {
return temp[idx_end] == temp[idx_start];
}
if temp[idx_end] != temp[idx_start] {
return false;
}
idx_end -= 1;
idx_start += 1;
}
}
#[allow(dead_code)]
fn alg_2(mut number: i32) -> bool {
if number < 0 {
return false;
}
let mut digits = (number as f32).log10().floor() as usize;
if digits == 0 {
return true;
}
loop {
number = (number - (number % 10) * 10i32.pow(digits as u32)) / 10;
if number < 0 || digits <= 1 {
break;
}
digits -= 2;
}
number == 0
}