请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
本题关键是了解判断数值的规则: 1、数字分5个部分,正负号、数字、小数点、小数、指数(包括e、可选的正负号、整数) 2、正负号存在则其后必须跟数字或小数点 3、小数点前或后必须有数字 4、指数符号e前必须有数字 5、字符串前后的空格不影响判断
代码:
class Solution: def isNumber(self, s: str) -> bool: s = s.strip() s = s.lower() if len(s) == 0: return False if s[0] == '+' or s[0] == '-': s = s[1:] if len(s) == 0: return False for i in range(len(s)): if s[i] == '.' or s[i] == 'e': if len(s) == 1 or (i == 0 and (s[1] > '9' or s[1] < '0')): return False if s[i] == 'e' and i == 0: return False s = s[i:] break if s[i] > '9' or s[i] < '0': return False if i == len(s) - 1: return True if s[0] =='.': s = s[1:] if len(s) == 0: return True for i in range(len(s)): if s[i] == 'e': s = s[i+1:] if len(s) == 0: return False break if s[i] > '9' or s[i] < '0': return False if i == len(s) - 1: return True else: s = s[1:] if len(s) == 0: return False if s[0] == '+' or s[0] == '-': s = s[1:] if len(s) == 0: return False for i in range(len(s)): if s[i] > '9' or s[i] < '0': return False return True本题直接按照规则进行判断,时间复杂度O(n),空间复杂度O(1)
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。提示: 1 <= nums.length <= 50000 1 <= nums[i] <= 10000
代码:
class Solution: def exchange(self, nums: List[int]) -> List[int]: index = 0 for i in range(len(nums)): if nums[i] % 2 != 0: if i != index: nums[i], nums[index] = nums[index], nums[i] index += 1 else: index += 1 return nums本题通过维护一个奇数指针index解决,保证[0, index]位置的数全为奇数。从前到后遍历整个数组,倘若为奇数则通过交换数值和调整index指针调整数组。
时间复杂度O(n),空间复杂度O(1)