код python3 для «лексикографического ранга слова с повторяющимися символами» дает неправильный вывод - PullRequest
0 голосов
/ 08 ноября 2018

Мой код Python 3 для поиска лексикографического ранга данного слова с повторяющимися символами работает нормально для всех входных данных, кроме «lDoAgpWmipGWOUuCIksS», мой код возвращает 739156, однако ожидаемый ответ - 739136, и он упоминается в вопросе для возврата ( Ваш ответ% 1000003), поскольку ответ может не соответствовать целому числу. Я просто не могу решить эту проблему и не могу найти точного решения моей проблемы. Может быть, я не справляюсь с переполнением должным образом. ниже мой код:

class Solution:
# @param A : string
# @return an integer
def findRank(self, A):
    n = len(A)
    curr = 1
    for i in range(0,n):
        less=0
        #loop to calculate number of smaller characters after the current character
        for j in range(i+1,n):
            if(ord(A[j])<ord(A[i])):
                less+=1
        #count frequency of duplicate characters
        l=[0]*52
        for j in range(i,n):
            if ((ord(A[j]) >= ord('A')) and ord(A[j]) <= ord('Z')):
                l[ord(A[j]) - ord('A')] += 1 
            else:
                l[ord(A[j]) - ord('a') + 26] += 1
        count=1
        for ele in l:
            count*=fact(ele)
        curr += (fact(n - i - 1) * less) / count
    return int((curr)%(1000003))

функция для расчета факториала

def fact(m):
if(m==0 or m==1):
    return (1)
return (m*fact(m-1))
...