LeetCode-1012-至少有 1 位重复的数字
创始人
2025-05-31 15:13:51
0

在这里插入图片描述

1、递归+动态规划

我们可以使用数组dp[i]dp[i]dp[i]来记录到字符串的第iii位位置,前几位产生满足条件的情况数总和。显然比起寻找至少有一位重复的数字,更简单的方法是用总数减去每一位都不重复的数字。因此我们定义函数f(i,mask,isLimit,isNum),其中:

  1. mask表示已经被选中的数字集合,0 表示未选中,1表示选中;
  2. isLimit表示当前的情况是否会受到n的约束,若为真则说明在当前情况中,我们最多只能遍历到s[i]
  3. isNum表示当前位置是否可以从 0 开始,真表示可以。

在递归过程中:

  1. isNum为假说明当前为第一位,后面递归中我们的isLimit可以置为真,因为不管多大都不会超过n
  2. isNum为真说明当前数字不为第一位,我们需要根据isNumisLimit判断当前可以填入数字的范围。

i指向字符串的末尾时,说明我们已经遍历完当前字符串。若isNum为真说明当前合法,返回 1 ,否则返回 0 。

class Solution {
public:int numDupDigitsAtMostN(int n) {auto s = to_string(n);int m = s.length(), dp[m][1 << 10];memset(dp, -1, sizeof(dp)); // -1 表示没有计算过function f = [&](int i, int mask, bool is_limit, bool is_num) -> int {if (i == m)return is_num; // is_num 为 true 表示得到了一个合法数字if (!is_limit && is_num && dp[i][mask] != -1)return dp[i][mask];int res = 0;if (!is_num) // 可以跳过当前数位res = f(i + 1, mask, false, false);int up = is_limit ? s[i] - '0' : 9; // 如果前面填的数字都和 n 的一样,那么这一位至多填数字 s[i](否则就超过 n 啦)for (int d = 1 - is_num; d <= up; ++d) // 枚举要填入的数字 dif ((mask >> d & 1) == 0) // d 不在 mask 中res += f(i + 1, mask | (1 << d), is_limit && d == up, true);if (!is_limit && is_num)dp[i][mask] = res;return res;};return n - f(0, 0, true, false);}
};

相关内容

热门资讯

弓影浮杯的近义词 弓影浮杯的近义词有:杯弓蛇影,弓影浮杯[gōng yǐng fú bēi]的意思:形容疑神疑鬼,自相...
唯唯诺诺,唯唯诺诺的意思,唯... 唯唯诺诺wéi wéi nuò nuò [释义]形容自己没有主意;一味附和;恭顺听从的样子。[...
稀稀拉拉的近义词 稀稀拉拉的近义词有:三三两两,疏疏朗朗,稀稀落落,零零散散,稀稀拉拉[xī xī lā lā]的意思...
噬脐无及的近义词 噬脐无及的近义词有:噬脐何及,噬脐莫及,噬脐无及[shì qí wú jí]的意思:亦作“噬脐莫及”...
得意忘形的反义词   得意忘形  【反义词】怅然若失、心灰意冷  【注音】dé yì w&...
金鼓齐鸣的近义词 金鼓齐鸣的近义词有:刀光剑影,金鼓连天,金鼓齐鸣[jīn gǔ qí míng]的意思:金鼓:古时军...
疑惑的词语解释 关于疑惑的词语解释  【中文】:疑惑  【读音】:yí huò  【疑惑的意思】:心里不明白;困惑。...
乘虚以入的近义词 乘虚以入的近义词有:乘虚而入,乘虚以入[chéng xū yǐ rù]的意思:乘:趁着;虚:空隙,弱...
卧榻之旁,岂容他人鼾睡的近义... 卧榻之旁,岂容他人鼾睡的近义词有:卧榻之下,岂容他人酣睡,卧榻之侧,岂容他人鼾睡,卧榻之侧,岂容鼾睡...
颐指气使的近义词 颐指气使的近义词有:发号施令,盛气凌人,目使颐令,目指气使,趾高气扬,颐指风使,颐指气使[yí zh...
关于温和的近义词   导语:近义词是语文学习中常见的,学得好对提高分数有很大作用。下面是小编给大家整理的关于温和的近义...
摛藻绘句的近义词 摛藻绘句的近义词有:摛藻雕章,摛藻绘句[chī zǎo huì jù]的意思:摛:铺陈;藻:文采。铺...
短吁长叹的近义词 短吁长叹的近义词有:短叹长吁,短吁长叹[duǎn xū cháng tàn]的意思:吁:叹气。长声、...
波路壮阔的近义词 波路壮阔的近义词有:波澜壮阔,波路壮阔[bō lù zhuàng kuò]的意思:波路:波涛。比喻规...
闭口结舌的近义词 闭口结舌的近义词有:闭口藏舌,闭口结舌[bì kǒu jié shé]的意思:闭着嘴不说话。犹言闭口...
好汉做事好汉当的近义词 好汉做事好汉当的近义词有:一人做事一人当,敢做敢当,好汉做事好汉当[hǎo hàn zuò shì ...
能柔能刚的近义词 能柔能刚的近义词有:能刚能柔,能柔能刚[néng róu néng gāng]的意思:柔:温和;刚:...
执鞭随镫的近义词 执鞭随镫的近义词有:执鞭坠镫,执鞭随蹬,执鞭随镫[zhí biān suí dèng]的意思:比喻因...
信口开河的近义词 信口开河的近义词有:一簧两舌,信口开合,信口开呵,信口胡言,信口胡诌,信口雌黄,口不择言,天南地北,...
书香世家的近义词 书香世家的近义词有:书香人家,书香门户,诗礼人家,书香世家[shū xiāng shì jiā]的意...