LeetCode Palindrome Number
来源:互联网 发布:简述数据库设计步骤 编辑:程序博客网 时间:2024/05/18 16:19
问题网址:https://leetcode.com/problems/palindrome-number/description/
问题描述:
确定一个整数是否是回文。 不必考虑额外的空格。
一些提示:
负整数可能是回文? (即-1)
如果您正在考虑将整数转换为字符串,请注意使用额外空间的限制。
你也可以尝试颠倒一个整数。 但是,如果您已经解决了“反向整数”问题,则知道反转整数可能会溢出。 你将如何处理这种情况?
有一个更通用的方法来解决这个问题。
下面讨论一种方法
方法1恢复一半数字[接受]
直觉
首先想到的想法是将数字转换为字符串,并检查字符串是否是回文,但这需要额外的非常量空间来创建字符串,这是问题描述所不允许的。
第二个想法是将数字本身还原,然后将数字与原始数字进行比较,如果它们相同,则数字是回文。但是,如果反转的数字大于\ text {int.MAX} int.MAX,我们将遇到整数溢出问题。
根据第二个想法的想法,为了避免被还原的数字的溢出问题,如果我们只返回\ text {int}整数的一半呢?毕竟,如果数字是回文,回文的后半部分应该与前半部分相同。
例如,如果输入是1221,如果我们可以将数字“1221”的最后部分从“21”恢复为“12”,并将其与数字“12”的前一半相比较,因为12是相同的作为12,我们知道这个数字是一个回文。
让我们看看我们如何将这个想法转化为算法。
算法
首先,我们应该关心一些边缘情况。所有负数不是回文,例如:-123不是回文,因为’ - ‘不等于’3’。所以我们可以为所有负数返回false。
现在让我们考虑如何恢复数字的后半部分。对于1221号码,如果我们做1221%10,我们得到最后一位数字1,从第二位数字到最后一位数字,我们需要从1221中删除最后一位数字,我们可以将它除以10,1221 / 10 = 122.然后我们可以通过做一个10,122%10 = 2的模数再次得到最后一个数字,如果我们把最后一个数字乘以10并加上第二个数字1 * 10 + 2 = 12,我们想要的还原号码。继续这个过程会给我们更多的数字还原的数字。
现在的问题是,我们怎么知道我们已经达到了一半呢?
由于我们将数字除以10,并将倒数乘以10,当原数小于倒数时,意味着我们已经处理了一半的数字。
public class Solution { public bool IsPalindrome(int x) { if(x < 0 || (x % 10 == 0 && x != 0)) { return false; } int revertedNumber = 0; while(x > revertedNumber) { revertedNumber = revertedNumber * 10 + x % 10; x /= 10; } return x == revertedNumber || x == revertedNumber/10; }}
时间复杂度:O(logn)
- LeetCode: Palindrome Number
- LeetCode Palindrome Number
- [Leetcode] Palindrome Number
- LeetCode: Palindrome Number
- [LeetCode] Palindrome Number
- leetcode 117: Palindrome Number
- Leetcode : Palindrome Number
- 【leetcode】Palindrome Number
- [LeetCode]Palindrome Number
- LeetCode 9 - Palindrome Number
- LeetCode-Palindrome Number
- [leetcode] Palindrome Number
- LeetCode - Palindrome Number
- LeetCode | Palindrome Number
- Leetcode: Palindrome Number
- LeetCode: Palindrome Number
- 【leetcode】Palindrome Number
- Leetcode Palindrome Number
- C语言详解(5)常量
- HTML(六)
- 复数1
- 大规模字符串的匹配
- IntelliJ IDEA debug 调试打开 Evaluate Expression计算表达式窗口
- LeetCode Palindrome Number
- HTML(七)
- 最牛逼android上的图表库MpChart(二) 折线图
- MIHH-HDU-2010---2019
- 树状数组 区间修改 区间查询
- 分析化学总结(1)
- 第7次c语言练习(部分)
- 配置SQL Server 2016无域AlwaysOn
- Git 学习和常用链接