【简单】【LeetCode刷题笔记(四)】之9.回文数

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 题目

(一) 题干

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

(二) 示例

示例 1:

        输入: 121
        输出: true

示例 2:

        输入: -121
        输出: false

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

二. 思路

(一) 数字转string字符串比较

        首先想到的都是转字符串,然后首尾连续比较,这种方法非常简单,速度也挺快。将数字转为字符串,从字符串的首字符开始,相对于尾部开始的字符串,一一比较,如有不同,则返回false。

(二) 巧妙思路:边取尾数边比较

        利用数学方法取尾数,利用每次取的尾数来构造整数reverse,因为我们每次得到的尾数的顺序和前面数字的顺序是一样的,通过比较尾数构造的整数reverse和剩余整数x的大小,就可以得知我们是否已经操作到了原始数字尾数的一半了。

        如果reverse >=x,则说明已经操作到了原始数字位数的一半了。

        当原数位数为偶数且是回文数时,则结果x = reverse;
        当袁术位数为奇数且是回文串时,则结果x = reverse / 10;
        其他结果均为false

        注意:有一些必定为false的回文数一开始就直接排除掉:

X < 0;
X % 10 ==0 && x !+ 0

三. 代码实现

(一) string实现


class Solution {
public:
	bool isPalindrome(int x) {
		//用string解决
		string s = to_string(x);
		bool flag = true;
		for (int i = 0; i < s.length()/ 2; ++i) {
			if (s[i] != s[s.length() - i]) {
				flag = false;
				break;
			}
		}
		return flag;
	}
};

(二) 弹出尾数


class Solution {
public:
	bool isPalindrome(int x) {
		//两种一定false
		if (x < 0 || (x % 10 == 0 && x != 0))
			return false;

		int reverse = 0;
		while (x > reverse) {
			reverse = reverse * 10 + x % 10;
			x /= 10;
		}

		return x == reverse || x == reverse / 10;
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值