当前位置: 首页 > wzjs >正文

县政府网站建设意见百度网站安全检测

县政府网站建设意见,百度网站安全检测,wordpress一键变灰色,美国做美业网站的么特题目 给你两个 正 整数 n 和 k 。 如果一个整数 x 满足以下条件,那么它被称为 k 回文 整数 。 x 是一个 回文整数 。 x 能被 k 整除。 如果一个整数的数位重新排列后能得到一个 k 回文整数 ,那么我们称这个整数为 好 整数。比方说,k 2 …

题目

给你两个 整数 nk

如果一个整数 x 满足以下条件,那么它被称为 k 回文 整数 。

  • x 是一个 回文整数 。

  • x 能被 k 整除。

如果一个整数的数位重新排列后能得到一个 k 回文整数 ,那么我们称这个整数为 整数。比方说,k = 2 ,那么 2020 可以重新排列得到 2002 ,2002 是一个 k 回文串,所以 2020 是一个好整数。而 1010 无法重新排列数位得到一个 k 回文整数。

请你返回 n 个数位的整数中,有多少个 整数。

注意 ,任何整数在重新排列数位之前或者之后 都不能 有前导 0 。比方说 1010 不能重排列得到 101 。

示例 1:

输入:n = 3, k = 5

输出:27

解释:

部分好整数如下:

  • 551 ,因为它可以重排列得到 515 。

  • 525 ,因为它已经是一个 k 回文整数。

示例 2:

输入:n = 1, k = 4

输出:2

解释:

两个好整数分别是 4 和 8 。

示例 3:

输入:n = 5, k = 6

输出:2468

提示:

  • 1 <= n <= 10

  • 1 <= k <= 9

思路

        本题其实可以分成2个部分:1、求出长度为n且可以被k的回文数字;2、计算第1步求出来数字重新排列后的所有排列可能。

        对于第1步,如果直接遍历判断数字是否是回文肯定会超时,我们尝试构造回文数字。由于回文数字的特点,前半部分和后半部分是对称的,根据长度的奇偶性不同,我们可以分成2种情况:

  • n是奇数,前(n-1)/2 和 后(n-1)/2是对称的,最中间1位是任意的

  • n是偶数,前 n/2 和后 n/2 是对称的

        上述2种情况,在构造的时候,可以统一:我们枚举左半部分的开始,1开头,后面跟(n-1)/2个0,如果n是奇数,后半部分是左半部分反转后去掉首字符,如果是偶数,后半部分直接就是左半部分反转。构造出回文后,我们再判断1次是否可以被k整除,排除掉不能整除的回文数。

        接下来,对于每一个长度为n的整除k的回文,我们要计算排列组合。对于相同数字组合的回文,我们要去重,避免重复计算。例如,n = 4,k = 2,此时 2442 和 4224 都是符合条件的,但是计算的时候,我们只要计算1个数的所有排列即可。去重的方法可以把这个数字组成的字符数组进行排序,排序后的字符串唯一即可。

        对于一个给定的数字,求出全排列的数量,在另外一题有推导过,这里直接使用那一题的结论。

代码

private static final int[] FAC;
​
static {FAC = new int[11];FAC[0] = 1;for (int i = 1; i < FAC.length; i++) {FAC[i] = FAC[i - 1] * i;}
}
​
public long countGoodIntegers(int n, int k) {long ans = 0;Set<String> seen = new HashSet<>();int begin = (int) Math.pow(10, (n-1)/2);for (int left = begin; left < begin * 10; left++) {String leftStr = String.valueOf(left);String full = leftStr + new StringBuilder(leftStr).reverse().substring(n % 2);if (Long.parseLong(full) % k != 0) {continue;}char[] chars = full.toCharArray();Arrays.sort(chars);if (seen.contains(String.valueOf(chars))) {continue;}ans += cnt(chars);seen.add(String.valueOf(chars));}return ans;
}
​
private long cnt(char[] chars) {int[] cnt = new int[10];for (char c : chars) {cnt[c - '0']++;}int n = chars.length;long ans = (long) (n - cnt[0]) * FAC[n - 1];for (int c : cnt) {ans /= FAC[c];}return ans;
}
耗时

http://www.dtcms.com/wzjs/353563.html

相关文章:

  • 如何免费弄一个网站谷歌手机版下载安装
  • 做的比较好的美食网站怀柔网站整站优化公司
  • ai智能生成图片免费网站推广赚钱的app
  • 品牌好的佛山网站建设专业软文发布平台
  • 宁夏网站建设公司广东短视频seo搜索哪家好
  • 临沂 网站建设百度投放广告平台
  • 一个网站建设多少钱?搜索指数的数据来源是什么
  • wordpress 标签拼音苏州优化排名seo
  • 网站策划编辑如何做企业网络搭建
  • 网站模板修改器百度灰色关键词代做
  • 网站建设报价 下载新网站快速排名软件
  • 网站申请微信支付做关键词推广
  • 网站开发如何实现数据库的链接长春seo培训
  • 大型html5浅蓝色网站设计公司dede模板专门搜索知乎内容的搜索引擎
  • 广州网站平台建设武汉排名seo公司
  • 枞阳县住房和城乡建设局网站互联网营销推广
  • 电商购物网站建设地推拉新app推广平台有哪些
  • 英文网站制作 官网杭州seo网站
  • 网站在建设是什么意思万网商标查询
  • 网站导航效果网络营销优化
  • wordpress添加多个菜单阜阳seo
  • 店铺出租转让信息网站建设多少钱开发制作app软件
  • 怎么做微信钓鱼网站广州营销课程培训班
  • 网站规划与开发技术朋友圈广告怎么投放
  • 网站建设规划方案.ppt怎样做seo搜索引擎优化
  • 网站建设导入视频广州关键词搜索排名
  • 九江做网站哪家好微信推广引流加精准客户
  • 工装设计网站推荐软文推广平台
  • 济南网站建设培训万能导航网
  • 网站难做广东河源最新疫情