algorithm-problem-leetcode-3260
3260. 找出最大的 N 位 K 回文数(2370)
给你两个 正整数 n 和 k。
如果整数 x 满足以下全部条件,则该整数是一个 k 回文数:
x 是一个
回文数
。
x 可以被 k 整除。
以字符串形式返回 最大的 n 位 k 回文数。
注意,该整数 不 含前导零。
示例 1:
输入: n = 3, k = 5
输出: “595”
解释:
595 是最大的 3 位 k 回文数。
示例 2:
输入: n = 1, k = 4
输出: “8”
解释:
1 位 k 回文数只有 4 和 8。
示例 3:
输入: n = 5, k = 6
输出: “89898”
提示:
1 <= n <= 10^5
1 <= k <= 9
数位dp,记忆化搜索
123456789101112131415161718192021222324252627282930313233class Solution { char res[]; public String largestPalindrome(int n, int k) { ...
algorithm-problem-leetcode-2719
2719. 统计整数数目(2355)
给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件,我们称它是一个好整数:
num1 <= x <= num2
min_sum <= digit_sum(x) <= max_sum.
请你返回好整数的数目。答案可能很大,请返回答案对 10^9 + 7 取余后的结果。
注意,digit_sum(x) 表示 x 各位数字之和。
示例 1:
123输入:num1 = "1", num2 = "12", min_num = 1, max_num = 8输出:11解释:总共有 11 个整数的数位和在 1 到 8 之间,分别是 1,2,3,4,5,6,7,8,10,11 和 12 。所以我们返回 11 。
示例 2:
123输入:num1 = "1", num2 = "5", min_num = 1, max_num = 5输出:5解释:数位和在 1 到 5 之间的 5 个整数 ...
algorithm-problem-leetcode-2376
2376. 统计特殊整数(2120)
如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。
给你一个 正 整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。
示例 1:
123输入:n = 20输出:19解释:1 到 20 之间所有整数除了 11 以外都是特殊整数。所以总共有 19 个特殊整数。
示例 2:
123输入:n = 5输出:5解释:1 到 5 所有整数都是特殊整数。
示例 3:
1234输入:n = 135输出:110解释:从 1 到 135 总共有 110 个整数是特殊整数。不特殊的部分数字为:22 ,114 和 131 。
提示:
1 <= n <= 2 * 10^9
思路:记忆化搜索dp
1234567891011121314151617181920212223242526class Solution { char s[]; int memo[][]; // 记忆化 public int countSpecialNumbers(int n) { s = String.val ...