首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一起学Rust-实战leetcode(七)

一起学Rust-实战leetcode(七)

作者头像
江湖安得便相忘
发布2019-10-15 22:57:23
6030
发布2019-10-15 22:57:23
举报

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

示例 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可回收BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档