剑指刷题10

面试题20: 表示数值的字符串

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。

解题思路:这个题目用排除法做。

算法:

-*- coding:utf-8 -*-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution:
# s字符串
def isNumeric(self, s):
# write code here
if len(s) <= 0:
return False
has_point = False
has_sign = False
has_e = False
for i in range(len(s)):
if s[i] == 'e' or s[i] == 'E':
if has_e == True:
return False
else:
if not s[i+1:]:
return False
has_e = True
elif s[i] == '+' or s[i] == '-':
if has_e:
if s[i-1] != 'e' and s[i-1] != 'E':
return False
if i > 0 and s[i-1] != 'e' and s[i-1] != 'E':
return False
has_sign = True
elif s[i] == '.':
if has_point or has_e :
return False
else:
has_point = True
if i > 0 and (s[i-1] == 'e' or s[i-1] == 'E'):
return False
else:
if s[i] <'0' or s[i] > '9':
return False
return True

算法思路:条件排除主要还是使用if elif else来实现,对所有情况的排除没有先后关系,因为是和前面的状态相关。

面试题 21:调整数组顺序,使奇数在偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

解题思路:

算法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
def is_even(num):
return (num & 1) == 0
left, right = 0, len(array) - 1
while left < right:
while not is_even(array[left]):
left += 1
while is_even(array[right]):
right -= 1
if left < right:
array[left], array[right] = array[right], array[left]
return array
请作者喝杯咖啡吧!