一起学Rust-实战leetcode(七)

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

你能不将整数转为字符串来解决这个问题吗?

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-number

一道来自leetcode的题目“回文数”。

简单分析

回文数的特征,正着和反着是完全一样的数字。

根据例子,负数由于负号的关系始终不能是回文数,所以遇到负数可以直接判定为假。

单独的个位数一定是回文数。

方法

一种可以转换为字符串,倒序后比较,另一种可以使用数字计算,低位通过计算转换为高位数,比较新数字与原数。

这里采用第二种,代码很简单:

fn is_palindrome(x: i32) -> bool {    // 负数和个位数直接返回    if x < 0 {return false;}    if x >= 0 && x < 10 {return true;}
    let mut new_x = 0;    let mut tmp_x = x;
    while tmp_x > 0 {        // 从低位开始依次转换为高位        new_x = new_x * 10 + tmp_x % 10;        tmp_x /= 10;    }
    new_x == x}

字符串比较的方法

fn is_palindrome(x: i32) -> bool {    if x < 0 {return false;}    if x >= 0 && x < 10 {return true;}        //转换为字符串    let origin = x.to_string();    //倒置字符串    let new_s = String::from_utf8(s.bytes().rev().collect::<Vec<u8>>()).unwrap();    origin == new_s}

to_string():数字转字符串

bytes():获取字符串的字节类型迭代器

rev():倒置一个迭代器的内容

collect():收集迭代数据为Vec<u8>类型

from_utf8:从Vec<u8>转换为字符串,返回Result类型


?END

本文分享自微信公众号 - 可回收BUG(way-of-full-stack)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券