Algorithm

  1. //Pop and Push Digits & Check before Overflow
  2. //pop operation:
  3. pop = x % 10;
  4. x /= 10;
  5. //push operation:
  6. temp = rev * 10 + pop;
  7. rev = temp;

切片(slice)

  1. >>> a
  2. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  3. >>> a[6:5] #如果start的位置比stop还靠后,Python直接返回空序列。
  4. []
  5. >>> a[5::-1]
  6. [5, 4, 3, 2, 1, 0]
  7. >>> a[:4:-2]
  8. [9, 7, 5]
  9. >>> a[::-1]
  10. [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
  11. '''当step为负数,切片将其解释为从start出发以步长step逆序索引序列。在缺省的情况下,Python的行为是尽可能
  12. 取最大区间,此时访问是逆序的,start应尽量取大,stop应尽量取小,才能保证区间最大。'''

Solution

  1. '''利用切片反转字符串'''
  2. if x >= 2**31-1 or x <= -2**31: return 0
  3. else:
  4. strg = str(x)
  5. if x >= 0:
  6. revst = strg[::-1]
  7. else:
  8. temp = strg[1:]
  9. temp2 =temp[::-1]
  10. revst = "-" + temp2
  11. if int(revst) >= 2**31-1 or int(revst) <= -2**31: return 0
  12. else: return int(revst)
  1. '''通过sign = [1,-1][x < 0]判断x正负'''
  2. sign = [1,-1][x < 0] # If x < 0, then x < 0 is True. As we know int(true) == 1,
  3. # so [1, -1][1] == -1.
  4. rst = sign * int(str(abs(x))[::-1]
  5. return rst if -(2**31)-1 < rst < 2**31 else 0

Python中反转字符串的方法

  1. string = 'ABCDEF'
  2. '''简单的步长为-1,即字符串的翻转'''
  3. def string_reverse1(string):
  4. return string[::-1]
  5. '''交换前后字母的位置'''
  6. def string_reverse2(string):
  7. t = list(string)
  8. l = len(t)
  9. for i,j in zip(range(l-1, 0, -1), range(l//2)):
  10. t[i], t[j] = t[j], t[i]
  11. return "".join(t)
  12. '''递归的方式,每次输出一个字符'''
  13. def string_reverse3(string):
  14. if len(string) <= 1:
  15. return string
  16. return string_reverse3(string[1:]) + string[0] #通过string[0]把首字母放到最后
  17. '''双端队列,使用extendleft(函数)'''
  18. from collections import deque
  19. def string_reverse4(string):
  20. d = deque()
  21. d.extendleft(string)
  22. return ''.join(d)
  23. '''使用for循环,从左至右输出'''
  24. def string_reverse5(string):
  25. return ''.join(string[i] for i in range(len(string)-1, -1, -1)) #步长为-1

Python range()函数

  1. '''Syntax:range(startm stop[, step])'''
  2. >>> range(10)
  3. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  4. >>> range(0, 30, 5)
  5. [0, 5, 10, 15, 20, 25]
  6. >>> range(0, -10, -1)
  7. [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
  8. >>> range(0)
  9. []
  10. >>> range(1, 0)
  11. []
  12. >>>x = 'python'
  13. >>> for i in range(len(x)):
  14. ... print(x[i])
  15. ...
  16. p
  17. y
  18. t
  19. h
  20. o
  21. n
  22. >>>

Pyton3 zip()函数

  1. >>> a = [1, 2, 3]
  2. >>> b = [4, 5, 6]
  3. >>> c = [4, 5, 6, 7, 8]
  4. >>> zipped = zip(a,b) #返回一个对象,在Python2.x中返回的是一个列表。
  5. >>> zipped
  6. <zip object at 0x103abc288>
  7. >>> list(zipped)
  8. [(1, 4), (2, 5), (3, 6)]
  9. >>> list(zip(a,c)) #元素个数与最短的列表一致
  10. [(1,4), (2,5), (3,6)]
  11. >>> a1, a2 = zip(*zip(a,b)) #与zip相反,zip(*)可理解为解压,返回二维矩阵式
  12. >>> list(a1)
  13. [1, 2, 3]
  14. >>> list(a2)
  15. [4, 5, 6]