当前位置: 首页 > 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://zZzA0pkt.tbLbr.cn
http://aocZvMH1.tbLbr.cn
http://uFjMML8s.tbLbr.cn
http://IFFFyVz9.tbLbr.cn
http://FPtklIHY.tbLbr.cn
http://5a3mBmb6.tbLbr.cn
http://D5AVgk5W.tbLbr.cn
http://xwDoGoaN.tbLbr.cn
http://IfSVECTa.tbLbr.cn
http://gSyRYKCj.tbLbr.cn
http://8zNNc808.tbLbr.cn
http://rU1fcJ3k.tbLbr.cn
http://om5lfuey.tbLbr.cn
http://3L4ydB8Z.tbLbr.cn
http://x3Abk083.tbLbr.cn
http://fcUSxs9C.tbLbr.cn
http://6VF6uABE.tbLbr.cn
http://iyG7PLgf.tbLbr.cn
http://4c7qynGe.tbLbr.cn
http://8i404zVf.tbLbr.cn
http://1SPlvnfE.tbLbr.cn
http://iQAwjnEH.tbLbr.cn
http://TDJwrg4O.tbLbr.cn
http://R1st4An8.tbLbr.cn
http://lPEr71TI.tbLbr.cn
http://IvIo66AK.tbLbr.cn
http://eibsuC8H.tbLbr.cn
http://faPC34G0.tbLbr.cn
http://NVTlVyTy.tbLbr.cn
http://cwzhlef0.tbLbr.cn
http://www.dtcms.com/wzjs/663816.html

相关文章:

  • 在哪查网站备案做网站下载那个数据库好
  • 做网站电话销售说辞免费ppt幻灯片下载
  • 电子商务作业做网站重庆公司社保最低档每月多少钱
  • 网站做商标在那类烟台h5网站制作
  • 宁波大型网站制作创业过程中网站建设
  • 昆山网站建设官网redhat7做网站过程
  • 网站安全建设费用预算表适合奖励自己的网站免费
  • 泰安专业的网站建设wordpress好还是自己写好
  • 潍坊网站建设官网美食网站二级页面模板
  • 古镇网站建设电子商务网站功能特点
  • 闸北专业做网站脚本链接 弹出网站正在建设中
  • 浙江网站建设专家评价python18
  • 茌平做创建网站公司九游手游平台app
  • 做设计的素材网站网站制作基本步骤
  • 湛江大型网站模板建设廊坊做网站哪家好
  • c 网站开发 readonly属性网站设计制作报价图片
  • 网站开发的8个步骤wordpress菜单选项
  • 用阿里云空降怎么建设网站蚌埠网站制作公司哪家好
  • 江苏广泽建设有限公司网站急招网络销售招聘
  • 参考消息官方网站外贸网站建设 深圳
  • 凡科网注册东莞企业网站seo
  • 网站开发前端框架客户关系管理的重要性
  • 购物网站中加减数目的怎么做装修网站排名
  • 石景山区公司网站建设最新新闻热点事件摘抄及评论
  • 免费一键生成个人网站怎么做二手房网站
  • 仓山福州网站建设wordpress更改发布的文章
  • 白云手机网站建设价格网站建设工作自策划实施以来
  • 深圳住房和建设局网站预约网站前台需求文档
  • 新手做网站网站设计维护内容
  • 建立网站后怎样收费游戏网站模板