atcoder ABC161 D - Lunlun Numberの勉強
・参考
AtCoder ABC 161 D - Lunlun Number (緑色, 400 点) - けんちょんの競プロ精進記録
・説明
参考記事のように、再帰関数で実装した。最大10桁までのルンルン数を求めてallにルンルン数を入れていく。あとはソートしてK番目を出力する。
また、再帰関数の次のルンルン数を求める部分は
for val in range(1,10): for j in range(-1,2): add=(val%10)+j print(val,j,add,val*10+add) #val*10+addがvalの1桁上のルンルン数になる。 #out 1 -1 0 10 1 0 1 11 1 1 2 12 2 -1 1 21 2 0 2 22 2 1 3 23 3 -1 2 32 3 0 3 33 3 1 4 34 4 -1 3 43 4 0 4 44 4 1 5 45 . . . .
となり、次の桁のルンルン数がval*10+addになる。
・実装
#参考:https://drken1215.hatenablog.com/entry/2020/04/05/150900 k=int(input()) all=[] def cal_runrun(d,val): #dが桁数 all.append(val) #10桁までのルンルン数を求める if d==10: return #次のルンルン数を求める。valがルンルン数でval*10+addがvalの次の桁のルンルン数になる。 #例えばvalが1で、val*10+addが10, 11, 12。 for j in range(-1,2): add=(val%10)+j if 0<=add<=9: cal_runrun(d+1,val*10+add) #main for v in range(1,10): cal_runrun(1,v) all.sort() print(all[k-1])