[LeetCode] Palindrome Number Valid Palindrome - 回文系列问题
题目概述:
Determine whether an integer is a palindrome. Do this without extra space.
题目分析:
判断数字是否是回文 例如121、656、3443
方法有很多,正着看和到着看两数相同;当然负数显然不是回文
我的方法:
第一种方法:
由于没有没有看到前面的without extra space。采用的方法是把数字转换为字符串,依次比较最前和最后两个字符是否相同,直到遍历完毕。
/*** 判断一个数字是否是回文数字 Palindrome* 最简单方法数组存储数字每位 判断回文 或依次比较数字left和right */
bool isPalindrome(int x) {char str[20]; //存储数字位数int i,j;int count; //数字位数//负数肯定不是回文if(x<0) return false;i=0;while(x>0) {str[i]=x%10+'0';i++;x=x/10;}count=i;i=0;j=count-1;while(i<j) {if(str[i]==str[j]) {i++;j--;}else {return false;}}return true;
}
第二种方法:
通过依次比较最高位和最低位数字,然后依次数字降低两位。要点是先计算最高位是多少位。需要注意计算高位时:x=x-(left*result)
例如110011 高位-1 低位-1 110011-100000=10011 10011/10=1001再判断,而%会出现错误。
/*** 判断一个数字是否是回文数字 Palindrome* without extra space. */
bool isPalindrome(int x) {int left,right; //数字高低位int result; //计算高位数字int number;if(x<0) return false;//计算最高位result=1;number=x;while(number>=10) { //注意=10result=result*10;number=number/10;}while(x>0) {left=x/result; //高位right=x%10; //低位if(left!=right) {return false;}else { //同时缩小两位 5005-5*1000=5 x=x-(left*result); //注意不能是 x=x%(left*result) 1100110011 Runtime Error result=result/100;x=x/10;}}return true;
}
Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.
该题目主要是判断字符串是否是回文,其中仅仅是字母和数字组成,需要删除额外字符。注意:大小写字母可以相同'z'=‘Z’,大写字母转小写字母加32即可。
判读一个字符串是否是回文,一种方法可以将字符串倒置然后和原字符串进行比较。这里采用一种类似字符串翻转的方法,通过从前后两个方向来比较判断是否是回文。
自己AC感觉还行,代码如下:
//自定义函数 判断是否是数字或字母
bool IsNumberAlp(char ch)
{if( (ch<='Z'&&ch>='A') || (ch<='z'&&ch>='a') || (ch<='9'&&ch>='0') ) {return true;}else {return false;}
}//字符串回文判断 包括字母和数字 "aA" 返回True说明不区分大小写
bool isPalindrome(char* s) {int length; //字符串长度int i,j;char left,right; //比较两个字符//s输出true ""if(s==NULL)return true;length=strlen(s);//数组下标i从前往后遍历 j从后往前遍历i=0;j=length-1;left=0;right=0;while(i<=j){if(IsNumberAlp(s[i])==true) { //字母 数字left = s[i];if(left>='A'&&left<='Z') { //大写字母转小写字母加32(重点)left=left+32;}}else {i++;continue;}if(IsNumberAlp(s[j])==true) {right = s[j];if(right>='A'&&right<='Z') { right=right+32;}}else {j--;continue;}if(left!=right) {return false;} else {i++;j--;}}return true;
}
最后希望文章对你有所帮助,如果文章中有错误或不足之处,还请海涵~
(By:Eastmount 2015-9-24 凌晨4点 http://blog.csdn.net/eastmount/)
[LeetCode] Palindrome Number Valid Palindrome - 回文系列问题相关推荐
- LeetCode第九题—— Palindrome Number(判断回文数)
题目描述 Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...
- java 最长回文_【Java】【每日算法/刷穿 LeetCode】5. 最长回文子串(中等)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]5. 最长回文子串(中等) 宫水三叶发布于 今天 12:00 题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 ...
- leetcode 1400. 构造 K 个回文字符串
leetcode 1400. 构造 K 个回文字符串 文章目录 leetcode 1400. 构造 K 个回文字符串 一.题目 1.题目描述 2.基础框架 3.解题思路 一.题目 原题链接:1400. ...
- PAT甲级1136 A Delayed Palindrome :[C++题解]回文串和高精度并输出过程
文章目录 题目分析 题目链接 题目分析 此题和PAT甲级1024 Palindromic Number:[C++题解]回文串和高精度加法 一样.区别是多了输出整个计算过程. 下面是主要知识点. 一个判 ...
- LeetCode算法题-Valid Palindrome II(Java实现)
这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...
- Palindrome(插入字符变成回文字符串)
题目:给定一个字符串,问最少插入多少字符,使字符串变成回文字符串. 思路:X:原字符串 Y:逆字符串 需要插入的字符数=X的长度-(X与Y的LCS的长度) 这里使用了滚动数组,压缩空间,原因: ...
- CodeForces - 1326D2 Prefix-Suffix Palindrome (Hard version)(马拉车/回文自动机)
题目链接:点击查看 题目大意:给出一个字符串,求出截取前缀和后缀后拼接而成的最长回文串,前缀和后缀不能相交 题目分析:题意很简单,思路也不难想,读完题后我尝试性的看了看样例,发现前缀和后缀拼接后如果能 ...
- C. Palindrome Basis 完全背包 回文串
链接:https://codeforces.com/contest/1673/problem/C 对于每个回文串,都有取和不取两种作法,而且数量不做限制,故用完全背包. 设i为回文串,则有状态转移方程 ...
- I Love Palindrome String HDU - 6599 回文树+hash
题意: 输出每个长度下的回文串(这些回文串的左半边也需要是回文串) 题解: 直接套上回文树,然后每找到一个回文串就将他hash. 因为符合要求的回文串本身是回文串,左半边也是回文串,所以它左半边也右半 ...
最新文章
- linux控制台界面编程,控制台窗口界面的编程控制(二)
- 【JAVA编码专题】深入分析 Java 中的中文编码问题
- Facebook 开源 Skip,面向对象+函数式编程语言
- 【Verilog HDL】深入理解部分语法规则的本质
- python面试题总结(5)--数据类型(字典)
- LeetCode 1288. 删除被覆盖区间(lambda排序)
- 经典面试题:用typeof来判断对象的潜在陷阱
- Qt学习笔记-Qt Graphic View Framework
- android开源2016_出版商的选择:2016年顶级开源书籍
- java 5 线程 睡眠,Java线程之线程的调度-休眠
- js中应用protocol buffer
- BNU10782被诅咒的代码
- Regularized linear regression(正则化线性回归)----吴恩达机器学习
- 歌谷服务套件gms_谷歌gms框架安装器下载-安卓9谷歌服务框架app安装-游戏大玩家...
- python 显著性检验_Python SciPy 统计显著性检验(Statistical Significance Tests)
- CPP QT实现excel的冻结窗格
- KDD cup 2017 高速公路收费站交通流量预测 中文翻译(转载)
- 9、Python xlsxwriter模块
- 在《王者荣耀》来聊聊游戏的帧同步
- 塔望食业洞察|中国有机食品市场研究与发展策略思考
热门文章
- oracle comment on的用法
- Linux学习 - 文件包处理命令
- Day2-数据类型、字符编码、购物车
- mysql_常用命令
- Computer Network Homework3’ s hard question
- kdevelp 导入makefile工程
- 聚集索引和非聚集索引[转]
- hibernate mysql 映射_Hibernate怎么不用配置mapping就使用数据库表映射实体
- 虚拟机无法访问主机mysql_虚拟机linux端mysql数据库无法远程访问的解决办法
- Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。