402. 移掉 K 位数字
前置知识:对于两个数 123a456 和 123b456,如果 a > b, 那么数字 123a456 大于 数字 123b456,否则数字 123a456 小于等于数字 123b456(基于这个来考虑的)。也就说,两个相同位数的数字大小关系取决于第一个不同的数的大小。
感谢题解




pub fn remove_kdigits(num: String, mut k: i32) -> String {let remain = num.len() - k as usize; // 需要的长度let mut stack = vec![];num.chars().for_each(|c| {while k > 0 && !stack.is_empty() && *stack.last().unwrap() > c {stack.pop();k -= 1;}stack.push(c);});// 接下来是处理里面可能存在的0,以及另一种情况,丢弃的k个没丢完// 注意这里丢弃的0不计入k,因此直接将最后结果截取出来需要的长度stack.truncate(remain);let res = stack.into_iter().skip_while(|c| *c == '0').collect::<String>();if res.is_empty() { "0".to_string() }else {res}}
