求一個出棧序列是不是合法的

def stackQue(n,ls):
    """
    假設入棧序列是1-n,如何判斷一個給定的出棧序列是合法的,判斷依據:
    出棧序列中的每一個數的後面比它小的數是按照遞減順序排序的
    """
    if len(ls)!=n:
        return False      
    i=0
    while i<len(ls):
        tmpl=[c for c in ls[i:] if ls[i]>c]
        if not isSort(tmpl):
            return False
        i+=1
    return True


def isSort(ls,reverse=False):
    """
    判斷一個序列是否按照順序排列,reverse=True正序
    """
    print(ls)
    if not reverse:
        i=0
        while i<len(ls)-1:
            if ls[i]<ls[i+1]:
                return False
            i+=1
        return True
    else:
        i=0
        while i<len(ls)-1:
            if ls[i]>ls[i+1]:
                return False
            i+=1
        return True


if __name__=='__main__':
    print(stackQue(5,[4,5,2,3,1]))
相關文章
相關標籤/搜索