Study Plan For Algorithms - Part33

WindMay發表於2024-09-19

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

相關文章