1、关于特殊数字字符串等
1.1 Palindrome Number(#9)
题目翻译: 给定一个数字,要求判断这个数字是否为回文数字. 比如121就是回文数字,122就不是回文数字.
解题思路: 这道题很明显是一道数学题,计算一个数字是否是回文数字,我们其实就是将这个数字除以10,保留他的余数,下次将余数乘以10,加上这个数字再除以10的余数.
需要注意的点:
负数不是回文数字.
0是回文数字.
时间复杂度: logN
代码如下:
def isPalindrome( x):
if x<0 or (x!=0 and x%10==0):
return False
y =0
m=x
while x!=0:
y = y * 10 + x % 10
x = x//10
return (y==m )
2、正则匹配
2.1 String to Integer (atoi)(#8)
题目要求:
1. 字串为空或者全是空格,返回0;
2. 字串的前缀空格需要忽略掉;
3. 忽略掉前缀空格后,遇到的第一个字符,如果是‘+’或‘-’号,继续往后读;如果是数字,则开始处理数字;如果不是前面的2种,返回0;
4. 处理数字的过程中,如果之后的字符非数字,就停止转换,返回当前值;
5. 在上述处理过程中,如果转换出的值超出了int型的范围,就返回int的最大值或最小值
代码如下:
import re
def myAtoi(self,str):
s =str.strip()
i = re.findall('(^[\+\-0]*\d+)\D*',s)
try:
result =''.join(i)
Max_index = 2**31-1
Min_index = -2**31
if int(result)>Max_index:
return Max_index
elif int(result)<Min_index:
return Min_index
return int(result)
except:
return 0
3 集合List
3.1 Reverse Integer(#7)
题目要求:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
代码如下:
def reverse(self, x):
str='%d'%x
a=[]
if str[0]=='-':
a.append("-")
for m in list(range(-1, -len(str), -1)):
a.append(str[m])
result= int(''.join(a))
else:
for m in list(range(-1,-(len(str)+1),-1)):
a.append(str[m])
result = int(''.join(a))
if result >2**31-1 or result <-2**31:
return 0
else:
return result
3.2 ZigZag Conversion(#6)
题目如下:
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
思路:
用下角标的方法判断太麻烦,而且会出现各种情况,尤其是最后一次循环以及第一行和最后一行特殊处理的情况,因此不合适。
采用List集合方