刪列造序之省存的遞歸解法

給定由 N 個小寫字母字符串組成的數組 A,其中每個字符串長度相等。
你需要選出一組要刪掉的列 D,對 A 執行刪除操作,使 A 中剩餘的每一列都是 非降序 排列的,然後請你返回 D.length 的最小可能值。
刪除 操作的定義是:選出一組要刪掉的列,刪去 A 中對應列中的所有字符,形式上,第 n 列爲 [A[0][n], A[1][n], …, A[A.length-1][n]])。(可以參見 刪除操作範例)

例子:
輸入:[“cba”, “daf”, “ghi”]
輸出:1
解釋:
當選擇 D = {1},刪除後 A 的列爲:[“c”,“d”,“g”] 和 [“a”,“f”,“i”],均爲非降序排列。
若選擇 D = {},那麼 A 的列 [“b”,“a”,“h”] 就不是非降序排列了。

思路:
從後向前遞歸檢查各列,直到l==-1,return 0
如果本列非降序,加一,檢查下一列,return dg()+1
否者,檢查下一列 return dg()

代碼:

class Solution:
    def minDeletionSize(self, A: List[str]) -> int:
        def dg(self,A,l):
            if l==-1:
                return 0
            for i in range(len(A)-1):
                if A[i][l]>A[i+1][l]:
                    return dg(self,A,l-1)+1
                    break
            return dg(self,A,l-1)
        return dg(self,A,len(A[0])-1)

我的函數嵌套不太會,如果有發現可以簡化的,歡迎留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章