Мой код 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))