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

asp 个人网站国外10条新闻简短

asp 个人网站,国外10条新闻简短,做网站开发学什么语言好,产品设计公司推荐题目 给你两个 正 整数 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/557409.html

相关文章:

  • 设备免费做网站推广怎么开一家网站开发公司
  • 怎么用php自己做网站吗网络推广理实一体化软件
  • 沧州网站seo公司丽水网站建设明恩玉杰
  • 网页制作网站创建中小型网站建设公司
  • 微信官网网站网站内容检测
  • 专注电子商务网站建设嵌入式软件开发项目
  • 电子科技网站建设室内设计模拟app
  • 建一个购物网站需要什么条件wordpress 主题 水墨
  • 数据展示网站模板丽水城乡建设局网站
  • 粉末涂料 技术支持 东莞网站建设网站建设预付流程
  • 又做投资的网站吗用dw怎么做用户登录页面的网站
  • 建设电子商务网站策划书wordpress ajax失败
  • 泰州专业做网站公司域名注册新网
  • 网站举报查询网站制作公司网站源码
  • 衣服网站建设规划书廊坊百度推广电话
  • 国外的营销网站有哪些wordpress新浪图床
  • 本溪做网站松江注册公司
  • 做百度关键词网站网站使用前流程
  • 买空间域名做网站做安卓icon图标包下载网站
  • 杭州网站排名服务沧州公司官网
  • 网站板块设计搜索引擎优化网站
  • 咸阳做网站排名珠海微信公众号制作
  • 网站开发网站设计做多宽
  • 成都网站建设技术支持wordpress 错误:cookies因预料之外的输出被阻止.
  • 高校信息公开网站建设河南的网络推广公司
  • 电商免费网站入口网站外链发布
  • 什么网站做推广比较好windows7系统优化工具
  • 江西房地产网站建设西安网站公司
  • 校园论坛网站建设论文铸铁加工平台
  • 做网站咋赚钱郑州企业网站怎么优化