最近打算练习写代码的能力,所以从简单题开始做。

大部分还是用C语言来解决。

@

题目

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

示例 1:

输入: 121

输出: true

示例 2:

输入: -121

输出: false

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

示例 3:

输入: 10

输出: false

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

具体链接 https://leetcode-cn.com/problems/palindrome-number/

思路

这与#7很相似,但是需要考虑方法的效率问题。

初步想法

初步的想法就是用一个while循环,在循环里面解决取余和倒序相加的工作。之后再用一个循环进行首尾比较。

具体代码如下:

bool isPalindrome(int x) {
if (x < 0 || x%10 == 0 && x != 0) return 0;
if (x / 10 == 0) return 1;
int a[20] = { 0 }, n = 0;
while (x) {
a[n] = x % 10;
x = x / 10;
n++;
} for (int i = 0; i < n / 2; i++){
if (a[i] != a[n-1-i]) return 0;
}
return 1;
}

需要注意的是,我们可以预先对数据进行判断,比如负数一定不是回文数,数字末尾为0的非0数也一定不是回文数,只有一位的数字一定是回文数。、

进一步想法

在看了官方题解后,提到了将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。

bool isPalindrome(int x) {
if (x < 0 || x%10 == 0 && x != 0) return 0;
if (x / 10 == 0) return 1;
int rev = 0;
while (x > rev) {
rev = x % 10 + rev * 10;
x = x / 10;
}
return x == rev || x == rev / 10;
}

需要注意的是由于预先不知道x是奇数位还是偶数位,所以最后的比较条件里出现了 x==rev/10.

最后想法

题目中也有提到将数字转换为字符串,我一开始想到用itoa,但是leetcode不支持这个函数,所以选用了sprintf来进行转换。

bool isPalindrome(int x) {
if (x < 0 || x % 10 == 0 && x != 0) return 0;
char a[20] = { 0 };
sprintf_s(a,"%d",x); for (int i = 0; i< (strlen(a) / 2); i++){
if (a[i] != a[strlen(a) - 1 - i]) return 0;
}
return 1;
}

参考链接

http://www.cnblogs.com/sddai/p/5774121.html

https://blog.csdn.net/xiaotaiyangzuishuai/article/details/79205773

总结

在简单问题上,不仅要注意到问题的解决,还要注重方法的效率问题,尝试用多种方法来解决。

【LeetCode】 #9:回文数 C语言的更多相关文章

  1. leetcode 1.回文数-(easy)

    2019.7.11leetcode刷题 难度 easy 题目名称 回文数 题目摘要 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 思路 一些一定不为回文数的 ...

  2. LeetCode 5回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  3. leetcode isPalindrome (回文数判断)

    回文很简单,就是正着读和反着读一样,要判断一个数是否为回文数只需要判断正反两个是不是相等即可. 再往深了想一下,只需要判断从中间分开的两个数一个正读,一个反读相等即可. 代码: class Solut ...

  4. Java实现 LeetCode 9 回文数

    9. 回文数 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false ...

  5. [LeetCode] 9. 回文数

    题目链接:https://leetcode-cn.com/problems/palindrome-number/ 题目描述: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都 ...

  6. leetcode记录-回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  7. Leetcode 9 回文数Palindrome Number

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  8. [LeetCode]9.回文数(Java)

    原题地址: palindrome-number 题目描述: 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都 ...

  9. leetcode 9 Palindrome Number 回文数

    Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...

随机推荐

  1. learning java 重定向标准输入输出

    output redirectionOut: public class RedirectOut { public static void main(String[] args) throws File ...

  2. WinDbg常用命令系列---输入内存值的命令e*

    e, ea, eb, ed, eD, ef, ep, eq, eu, ew, eza (Enter Values) e*命令将您指定的值输入内存.不要将此命令与~e(Thread-Specific C ...

  3. 「ZJOI2019」Minmax搜索

    传送门 Solution 叶子节点的变化区间是连续的,可得知非叶子节点的权值变化区间也是连续的 由此可知,\(W\)的变化值的可行域也是连续的,所以只需要看它能否变为\(W+1\)或\(W-1\) 对 ...

  4. element ui input 输入时触发事件

    <el-form-item label="客户名" :label-width="labelWidth"> <el-input v-model= ...

  5. 解决:E: Could not get lock /var/lib/dpkg/lock

    问题: ubuntu16 执行 sudo apt install aria2 命令时,提示如下错误 E: Could not get lock /var/lib/dpkg/lock - open (1 ...

  6. 为什么用ls和du显示出来的文件大小有差别?【转】

    在使用Linux ls命令查看文件大小时,发现文件很大,足有100个G,而使用du命令查看则不超过10个G. [root@shanghai devicemapper]# ls -l 总用量 -rwxr ...

  7. python list 和 tuple详解

    list------------------------------------------------------------------------ Python内置的一种数据类型是列表:list ...

  8. firewall防火墙常用操作

    # firewall防火墙常用操作 - 启动```systemctl start firewalld```- 停止```systemctl stop firewalld```- 重启```system ...

  9. 软件定义网络基础---REST API概述

    一:什么是REST API REST API是北向接口的主流设计方式 API是应用程序编程接口,是预先定义好的函数,可以供应用程序或开发人员访问调用 年 Roy Thomas Fielding 的博士 ...

  10. 【Java】Spring之基于注释的容器配置(四)

    注释是否比配置Spring的XML更好? 基于注释的配置的引入引发了这种方法是否比XML“更好”的问题.答案是每种方法都有其优点和缺点,通常,由开发人员决定哪种策略更适合他们.由于它们的定义方式,注释 ...