Study Plan For Algorithms - Part33

1. 有效数字
给定一个字符串 s ,返回 s 是否是一个 有效数字。
一般的,一个 有效数字 可以用以下的规则之一定义:

  1. 一个 整数 后面跟着一个 可选指数。
  2. 一个 十进制数 后面跟着一个 可选指数。

一个 整数 定义为一个 可选符号 '-' 或 '+' 后面跟着 数字。
一个 十进制数 定义为一个 可选符号 '-' 或 '+' 后面跟着下述规则:

  1. 数字 后跟着一个 小数点 .。
  2. 数字 后跟着一个 小数点 . 再跟着 数位。
  3. 一个 小数点 . 后跟着 数位。

指数 定义为指数符号 'e' 或 'E',后面跟着一个 整数。
数字 定义为一个或多个数位。

class Solution:
    def isNumber(self, s: str) -> bool:
        states = [
            { ' ': 0, 's': 1, 'd': 2, '.': 4 }, 
            { 'd': 2, '.': 4 } ,                
            { 'd': 2, '.': 3, 'e': 5, ' ': 8 }, 
            { 'd': 3, 'e': 5, ' ': 8 },         
            { 'd': 3 },                         
            { 's': 6, 'd': 7 },                 
            { 'd': 7 },                         
            { 'd': 7, ' ': 8 },                 
            { ' ': 8 }                          
        ]
        p = 0                           
        for c in s:
            if '0' <= c <= '9': t = 'd' 
            elif c in "+-": t = 's'     
            elif c in "eE": t = 'e'     
            elif c in ". ": t = c       
            else: t = '?'               
            if t not in states[p]: return False
            p = states[p][t]
        return p in (2, 3, 7, 8)

2. 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)
        for i in range(n - 1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1
                return digits
            digits[i] = 0
        return [1] + digits
posted @ 2024-09-19 06:59  WindMay  阅读(2)  评论(0编辑  收藏  举报