回文数

7.9 字符串-最小的回文数

匿名 (未验证) 提交于 2019-12-02 23:47:01
今天为大家讲述一道字符串的题目,重在理解思路,找到对应的某个值,如果挨个枚举时间复杂度过高, 而对字符串进行修改,灵活性会相应的高许多 题目描述 回文数是从前往后和从后往前得到的数是相同的。 现给你一个正整数N,请你找到比N大的最小的那个回文数P。 输入 输入包含多组测试数据。 每组输入一个正整数N,N不超过10000位,并且N不包含前导0。 输出 对于每组输入,输出比N大的最小的那个回文数P。 样例输入 Copy 44 3 175 样例输出 Copy  55  3

1309:【例1.6】回文数(Noip1999)

匿名 (未验证) 提交于 2019-12-02 23:43:01
传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1309 【题目描述】 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 10进制数 56,将 56加 65(即把56从右向左读),得到 121是一个回文数。又如,对于10进制数87, STEP1: 87+78= 165 STEP2: 165+561= 726 STEP3: 726+627=1353 STEP4:1353+3531=4884 在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N(2<N<=10或N=16)进制数 M.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。 【输入】 给定一个N(2<N<=10或N=16)进制数M。 【输出】 最少几步。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible”。 【输入样例】 9 87 【输出样例】 6注意有16进制位因此要专门判断,再模拟即可 #include<iostream> #include<cstring> #define N 310 using namespace std; int a[N],lena; bool hw(){ for(int

leetcode9 回文数

自作多情 提交于 2019-12-02 13:13:05
恩 注意观察输入是int X 说明有范围 并且有正负 特殊情况特判并且防溢出即可 负数,xxx0不会是回文数。 0是回文数 思路 先想itoa转char*然后头尾对比。但是时间空间开销有。 然后想直接int mod取首位但是首部不好取。 那就直接从尾部开始,取x的后一半翻转,对比前半部分。 辣么怎么判断到了一半奥 一般情况可以搞一个table判断先判断x的位数: final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE }; // Requires positive x static int stringSize(int x) { for (int i=0; ; i++) if (x <= sizeTable[i]) return i+1; } 这里简单的处理 while(rest>tail)即可,因为到达中间时位数多一位 这样奇数位时只需考虑tail后几位 偶数位时,tail会比rest多两位(假如不是回文数) class Solution { public: bool isPalindrome(int x) { int tail=0; if(x==0) return true; if(x<0||(x%10=

LeetCode(C++)刷题计划:9-回文数

吃可爱长大的小学妹 提交于 2019-12-02 10:58:49
9-回文数 @Author:CSU张扬 @Email:csuzhangyang@gmail.com or csuzhangyang@qq.com 1. 题目 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1 : 输入 : 121 输出 : true 示例 2 : 输入 : - 121 输出 : false 解释 : 从左向右读 , 为 - 121 。 从右向左读 , 为 121 - 。因此它不是一个回文数。 示例 3 : 输入 : 10 输出 : false 解释 : 从右向左读 , 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/palindrome-number 2. 解法 2.1 解法一 我们将该数字翻转得到的数字和原数字相等,此时它就是回文数。 考虑翻转后会溢出的问题,我们设置翻转后的数字设置为long类型即可。 当然2中方法并不适用所有情况,我们可以使用以下方法判断. if ( reverse > INT_MAX / 10 || ( reverse >= INT_MAX && ( temp % 10 ) > 7 ) ) return false ; 执行用时: 4 ms, 在所有

力扣回文数不利用字符串用数组

做~自己de王妃 提交于 2019-12-02 10:38:46
进阶不用字符串来思考 我的想法就是把要判断的数地位到高位不断地拿出来并且存入一个数组里面。 当然这个得分类讨论,带符号的负数是不存在回文数的,只有一位的数肯定是回文数。 还有个需要考虑的问题就是数组的长度多大,int型数据最大为2^31-1算出来就是2147483647就是10位,所以长度L=10,最后考虑从数组从0到L/2是否对称后半部分数据。 class Solution { public : bool isPalindrome ( int x ) { int result = 0 , temp = x , number = 0 , i = 0 , n , flag = 0 , demo [ 10 ] ; if ( x < 0 ) { return false ; } if ( x / 10 == 0 ) { return true ; } while ( ( temp / 10 ) != 0 ) { number = temp % 10 ; demo [ i ] = number ; temp / = 10 ; ++ i ; if ( temp / 10 == 0 ) { demo [ i ] = temp ; } } n = i + 1 ; for ( int k = 0 ; k < n / 2 ; ++ k ) { // cout<<demo[k];//测试用 if (

算法题--回文数

风流意气都作罢 提交于 2019-12-01 15:55:35
题目描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/palindrome-number 难度:简单 题解 我的题解 我的思路:不将数字转字符串,所以判断是否回文需要将数字进行反转,判断反转后的数字与原数字是否相等.可以先将负数排除,因为负数反转后负号在后导致必定不是回文(这里有个问题,正数其实也可以带符号的比如:+121,但是此题默认的应该是正数都不带符号). public boolean isPalindrome(int x) { if (x<0){ return false; } int y = x; // 定义为long型是为了防止反转后溢出 long z = 0; do { z = z*10 +y%10; y=y/10; } while (y>0); return x == z; }

Leetcode(9)回文数

时光总嘲笑我的痴心妄想 提交于 2019-12-01 10:27:06
Leetcode(9)回文数 [题目表述]: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 第一次:直接全部转 执行用时:148 ms; 内存消耗:13.4MB 效果:还行 class Solution: def isPalindrome(self, x: int) -> bool: s=str(x) if s==s[::-1]: return True else: return False 第二种方法:反转一半数字 执行用时:156 ms; 内存消耗:13.2MB 效果:还行 原因:1.额外空间 2.反转整数溢出 算法:1.负数全不是 2.反转后一半:利用%10/10 3.判断到一半:反转数字>未反转数字 class Solution: def isPalindrome(self, x): rev = 0 if not x: return True if x<0 or not x % 10: return False else: while x > rev: rev = rev * 10 + x % 10 x //= 10 return x == rev or x == rev // 10 ##第二个条件是由于可能是奇回文数 来源: https://www.cnblogs.com/ymjun/p/11681752.html

LeetCode-9回文数

无人久伴 提交于 2019-12-01 07:56:16
问题: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 分析:   首先想到将每一位上的数拆分出单独的整数,然后进行比较,如果将整数转换成字符串,然后利用java字符串的api可以轻松将问题解决,那么除了这种方式,我们还能想到哪种算法呢? 很容易想到利用数学知识解决,使用/和%两个运算搭配上循环取出每一位的值,存到数组中,然后利用数组循环进行比较,解决这个问题。 (leetcode上有更精妙的解决方式) 代码: class Solution { public boolean isPalindrome(int x) { if(x<0){ return false; } if(x==0){ return

leetcode第9题判断回文数

徘徊边缘 提交于 2019-12-01 02:42:11
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/palindrome-number 这里的定义负数都不是回文数 因此可以单独考虑 并且所有小于10且大于0的数都是回文数 因此也可以对其进行单独的考虑 回文数 顺着读和反着读是一样的结果 那么我们可以考虑将这个数进行反转 如果反转后的数值和原来的数值是一样的 那么我们就认为这个数是回文数 (这里需要注意一点)我们必须用一个值去存储原来的数值 因为如果直接在原来的数值上进行操作的话 那么原来的数值就会发生改变 直接上代码 package com.lzh.simple; import java.util.Scanner; public class PalindromeDemo9 { public static boolean isPalindrome(int x){ if(x<0){ return

LeetCode:Palindrome Number

荒凉一梦 提交于 2019-11-30 05:59:05
1、题目名称 Palindrome Number(回文数) 2、题目地址 https://leetcode.com/problems/palindrome-number 3、题目内容 英文:Determine whether an integer is a palindrome. Do this without extra space. 中文:确认一个整数是否是回文数 4、解题方法1 将数字翻转后判断与原数字是否相等,可以参考 LeetCode第7题(Reverse Integer) 的解题思路。Java代码如下: /** * 功能说明:LeetCode 9 - Palindrome Number * 开发人员:Tsybius * 开发时间:2015年9月24日 */ public class Solution { /** * 判断某数是否为回文数 * @param x 数字 * @return true:是,false:否 */ public boolean isPalindrome(int x) { //负数不能为回文数 if (x < 0) { return false; } //反转数字观察是否相等 if (x == reverse(x)) { return true; } else { return false; } } /** * 反转数字 * @param x