加油💪
一、题目:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、开始做题
第一次自己独立思考,独立写程序,而且是借助前两天学的一些知识😊
成绩可谓是相当的差。。。但是超开心。
方法1:Python数字转字符串
成绩:104ms,所有Python3提交中击败30.07%
13.6mb,所有Python3提交中击败5.88%
思路:将数字转换为字符串,然后通过求取字符串长度得知数字的位数,然后通过字符串切片的方式进行首尾对比。
class Solution:
def isPalindrome(self, x: int) -> bool:
s = str(x)
num = len(s)
k = int(num/2)
for i in range(k):
if s[i:i+1]==s[num-i-1:num-i]:
continue
else:
return False
return True
方法2和3:Python
以下两种都比我的好。。。哎也都比较简单,就不讲解逻辑了。
class Solution:
# 方法一: 将int转化成str类型: 双向队列
# 复杂度: O(n^2) [每次pop(0)都是O(n)..比较费时]
def isPalindrome(x: int) -> bool:
lst = list(str(x))
while len(lst) > 1:
if lst.pop(0) != lst.pop():
return False
return True
# 方法二: 将int转化成str类型: 双指针 (指针的性能一直都挺高的)
# 复杂度: O(n)
def isPalindrome(x: int) -> bool:
lst = list(str(x))
L, R = 0, len(lst)-1
while L <= R:
if lst[L] != lst[R]:
return False
L += 1
R -= 1
return True
方法三:C++
思路很简单,他分成了奇数位数和偶数位数。。。语法也比较简单。。只是人家想的很全面,而且C++本来就效率高,这也是我一直不想放弃C++的原因,就是难写,事情多,语法多。。。
class Solution {
public:
bool isPalindrome(int x) {
// 特殊情况:
// 如上所述,当 x < 0 时,x 不是回文数。
// 同样地,如果数字的最后一位是 0,为了使该数字为回文,
// 则其第一位数字也应该是 0
// 只有 0 满足这一属性
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
// 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
// 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
// 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
return x == revertedNumber || x == revertedNumber / 10;
}
};
三、知识点总结
1.list()可以把str转化为列表,然后用上list的武器:
(1)双向队列可以用pop函数进行弹出。
默认删除最后一个列表值:pop()
删除第一个元素:pop(0)
(2)双指针的方式,效率高。
例如:lst[L] != lst[R]
2.反序字符串:str(x)[::-1]。
此处涉及Python语法: str[起始位置:终止位置:步长]
return(str(x)==str(x)[::-1])一句话解决回文数问题。一句话!!!!我***服了。。。这难道就是所谓的秀儿?下面是一句话的成绩图:
四、个人感受
自己解决问题很锻炼自己的思维逻辑能力、算法储备、编程功底。但是。。。我的后两样都不太行。最终LeetCode简单题回文数,自己做的答案与别人相差甚远,前路漫漫,仍需努力啊!如果兄弟看到这里,希望能给个赞,互相鼓励下,谢谢了。