文章
2
粉丝
289
获赞
1
访问
18.3k
以37->375的动态规划为例
我们已经计算出37的各个数字出现次数
那么当37->375,有一下这些情况:
1、原1-->37中出现的数字全部*10,很容易理解,原有的15-->151、152、153……159,15由一次变为10次
2、新增了0-->9,因为原来的一位数都变成了两位数
3、原来1--37各自匹配一次0--9,那么0--9各自出现了37次
4、我们在第一步直接x10,那说明我们直接算到了379,事实上我们是375,那么6--9要各减去一次,除此之外3、7要减去4次(9-5=4)
5、再解释一下第4步,以我举的例子为例,我们多算了376、377、378、379,3和7多算了4次,6、7、8、9各多算一次
现在我们知道了一个数,他的出现的数字怎么统计,那我们只需要b的次数减去(a-1)的次数就得到了答案。
#include <algorithm>
#include <bits/stdc++.h>
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
long long res_a[10] = {0};
long long res_b[10] = {0};
void deal(string a, ll res[])
{
if (a == "0")
return;
ll num = 0;
//首位手动处理
for (int i = 0; i < 10; ++i)
{
res[i] *= 10;
res[i] += 1;
res[i] += num;
}
res[0]--;
int unit = a[0] - '0';
for (int i = 9; i > unit; i--)
{
res[i]--;
}
num = num * 1...
登录后发布评论
暂无评论,来抢沙发