dovme
V2EX  ›  算法

想问一道昨天面试的算法题

By dovme at 2020 年 7 月 14 日 · 2505 次点击

1 到 10^16(一到一亿亿)之间所有的降序数的个数,要求 1 秒出结果,不能穷举。语言不限。

降序数:高位数大于或等于低位数的数字。

正例:951, 62,321,8876,9

反例:123, 895 。

实在是不会啊。一点思路也没有,可悲的是百度我都没查到。

4 条回复
lance6716
   1
lance6716  
   2020 年 7 月 14 日 via Android
dp ?状态是(首位数字,长度)
geemaple
   2
geemaple  
   2020 年 7 月 15 日 via iPhone
数学题?无奈数学太渣,1 位数 0-9 都不是答案,2 位 9 开头有 0 种,8 开头 1 种... 1 开头 9 种 ... ,3 位数不会推到,哈哈,一直推到 16 位数
geemaple
   3
geemaple  
   2020 年 7 月 15 日 via iPhone
如果求反了,用总个数-答案🤔
lllue
   4
lllue  
   2020 年 7 月 15 日
```
ans=0;
dp[10]//十位数组
for(i from 0 to 9) dp[i]=1;//一位数
for(i from 1 to 15) //二位数及以上
for(j from 1 to 9)
dp[j]=dp[j]+dp[j-1];
for(i from 0 to 9) ans+=dp[i];
```
© 2026 V2EX · 32ms · 3.9.8.5