确定整数是否是回文?空间O(1)时间复杂度O(logn)
2017-10-22 13:23
344 查看
class Solution { public boolean isPalindrome(int x) { if( x <0 || (x % 10 == 0 && x != 0)){ return false; } int reverseNumber = 0; while( x > reverseNumber){ reverseNumber = reverseNumber*10 + x%10; x /= 10; } return x == reverseNumber || x == reverseNumber/10; } }
现在让我们考虑如何恢复上一半的数字。对于号码
1221,如果我们这样做
1221 % 10,我们得到最后一个数字
1,得到第二个数字,我们需要删除最后一个数字
1221,我们可以通过将它除以10来实现
1221 / 10 = 122。然后我们可以通过将模数乘以10得到最后一个数字
122 % 10 = 2,如果我们将最后一位乘以10,并添加第二个最后一个数字
1 * 10 + 2 = 12,则它给出我们想要的还原数字。继续这个过程将给我们更多的数字的恢复的数字。
现在的问题是,我们怎么知道我们已经达到了这个数字的一半?
由于我们将数字除以10,并将反转数乘以10,当原始数字小于反转数时,这意味着我们已经处理了一半数字。
相关文章推荐
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 剑指offer系列-T11_2数值的整数次方(时间复杂度为o(logn))
- 判断一个整数数组中是否有重复数字出现的O(n)时间复杂度算法
- 不使用额外空间,检查整数是否是回文结构
- leetcode之O(1)空间复杂度判断一个整数是否是回文整数
- 3.编写一个程序,读取五位整数并确定其是否为回文
- 将数组排序,数组中所有的负整数出现在正整数前面(时间复杂度为 O(n), 空间复杂度为 O(1)).
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)。
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度O(1),时间复杂度为O(n)
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 描述一个运行时间为Θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素
- 4.给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 每天一道LeetCode-----找到序列中第一个没有出现的正整数,要求时间复杂度是O(n),空间复杂度是O(1)
- 2.3-7 描述一个运行时间为Θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- O(logN)时间复杂度内求整数的N次方以及矩阵的N次方
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 有关算法时间复杂度和空间复杂度的浅析
- 时间复杂度和空间复杂度(一)