题意:
求一个区间内首尾数字相等的数的个数。
思路:
此题找规律,递推什么的也是非常的简单。。
还是贴下数位dp的解法。
LL f[20][10][10], l, r;
int d[20];
LL dp (int pos, int pre, int head, int flag) {
if (pos < 0) {
return (head && (head == pre));
}
if (flag || f[pos][pre][head] == -1) {
int last = flag ? d[pos] : 9;
LL ret = 0;
for (int i = 0;i <= last;++i) {
ret += dp (pos-1, i, head ? head : i, flag && (i == d[pos]) );
}
if (flag) return ret;
f[pos][pre][head] = ret;
}
return f[pos][pre][head];
}
LL solve(LL n) {
int len = 0;
while (n) {
d[len++] = n%10;
n /= 10;
}
memset(f, -1, sizeof(f));
return dp (len-1, 0, 0, 1);
}