interviews/training->training
This commit is contained in:
35
puzzles/training/num_valid_comb.py
Normal file
35
puzzles/training/num_valid_comb.py
Normal file
@@ -0,0 +1,35 @@
|
||||
#
|
||||
# The number of valid combinations of a strings for given input array a[],
|
||||
# where a=>1, z => 26, and 0 <= a[i] <= 9
|
||||
# {1,1,1} => {aaa, ak, ka} => 3
|
||||
# {1,1,0} => {aj} => 1 "/>
|
||||
#
|
||||
|
||||
|
||||
def valid_comb_aux(s, p, b, e, dyn):
|
||||
if b in dyn:
|
||||
print("dyn", p)
|
||||
return dyn[b]
|
||||
if b == e:
|
||||
print("fin", p)
|
||||
return 1
|
||||
count = 0
|
||||
for i in range(b+1, e+1):
|
||||
if 0 < int(s[b:i]) and int(s[b:i]) <= (ord('z')-ord('a')+1):
|
||||
p.extend(chr(ord('a')+int(s[b:i])-1))
|
||||
count = count + valid_comb_aux(s, p, i, e, dyn)
|
||||
p.pop()
|
||||
dyn[b] = count
|
||||
return count
|
||||
|
||||
|
||||
def valid_comb(s):
|
||||
dyn = {}
|
||||
return valid_comb_aux(s, [], 0, len(s), dyn)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(valid_comb("111"))
|
||||
print(valid_comb("110"))
|
||||
print(valid_comb("22222"))
|
||||
# valid_comb("12131456879234522222")
|
||||
Reference in New Issue
Block a user