leetcode 866. Prime Palindrome | 866. 回文素数

2023-05-16

题目

https://leetcode.com/problems/prime-palindrome/

在这里插入图片描述

题解

参考了答案:https://leetcode.com/problems/prime-palindrome/solution/
在这里插入图片描述
自己实现的时候,我把奇数位回文串和偶数位回文串拆开来了,最后去返回两种回文串当中的最小值,觉得这样更严谨,尽管这种严谨可以被数学证明是没有必要的。因为如果位数不同的话,结果的大小不是单调增的,不应该直接return。

例如,因为如果先算奇数,再算偶数的话,奇数是比偶数少一位的,这样有可能返回错误的最小值:

1002001	(假设它是false)
10022001(假设它是false)
1003001	(假设它是false)
10033001(假设它是true,直接返回了,是错误的最小值)
1004001	(假设它是true,这才是真正的最小值)

至于答案这样写为什么没有问题,是因为 All palindrome with even digits is multiple of 11. 相当于大于 11 的偶数都会返回 false,不会造成上述例子中返回 10033001 的情况。

class Solution {
    public int primePalindrome(int n) {
        if (n == 1) return 2;

        long even = primePalindromeEven(n);
        long odd = primePalindromeOdd(n);
        return (int) Math.min(even, odd);
    }

    public long primePalindromeEven(int n) {
        for (int L = 1; L <= 5; L++) { // 回文root的位数L
            for (int root = (int) Math.pow(10, L - 1); root < Math.pow(10, L); root++) { // 遍历位数为L的所有回文root
                // 偶数位回文串
                StringBuilder sb = new StringBuilder(String.valueOf(root));
                for (int i = L - 1; i >= 0; i--) {
                    sb.append(sb.charAt(i));
                }
                long num = Long.parseLong(String.valueOf(sb));
                if (num >= n && isPrime(num)) {
                    return num;
                }
            }
        }
        return Integer.MAX_VALUE;
    }

    public long primePalindromeOdd(int n) {
        for (int L = 1; L <= 5; L++) { // 回文root的位数L
            for (int root = (int) Math.pow(10, L - 1); root < Math.pow(10, L); root++) { // 遍历位数为L的所有回文root
                // 奇数位回文串
                StringBuilder sb = new StringBuilder(String.valueOf(root));
                for (int i = L - 2; i >= 0; i--) {
                    sb.append(sb.charAt(i));
                }
                long num = Long.parseLong(String.valueOf(sb));
                if (num >= n && isPrime(num)) {
                    return num;
                }
            }
        }
        return Integer.MAX_VALUE;
    }


    public boolean isPrime(long n) {
        if (n <= 2) return true;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        int i = solution.primePalindrome(9989900);
        System.out.println(i);
    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode 866. Prime Palindrome | 866. 回文素数 的相关文章

  • latex打双引号“ “

    latex中如果用英文输入模式的双引号键入 xff0c 则输出的结果与我们预期的不符合 xff0c 这并不是LaTeX的正确输入方式 34 test 34 输出为 xff1a 正确的输入方式为 xff1a 引号左边输入两个反引号 96 xf
  • 过拟合的原因以及解决办法(深度学习)

    过拟合 xff1a 模型在训练集上表现的非常好 xff0c 但在测试集的数据下表现很差 具体观察loss函数就是 xff0c train loss一直降低 xff0c 而test loss先降低 xff0c 而后随着epoach的增加 xf
  • Linux与MAC共享以及TimeMachine服务器的搭建

    自从添置了MBPR之后 xff0c 就发现使用Samba协议的话 xff0c Linux与MacOS之间传输速度相当不稳定 xff0c 我还一度以为是MBP的无线网卡问题 随后便尝试了一下AFP协议 xff0c 果然效果立现 xff0c 因
  • Python字符串转数字

    默认转换方式 xff1a num 61 int string 把二进制 xff0c 八进制 xff0c 十六进制转化为数字 xff0c python也提供了内置函数 xff0c 非常方便 xff0c 用法分别如下 xff1a num1 61
  • Linux根据进程名字彻底删除所有相关的子进程

    Linux有些时候kill 9进程pid xff0c 进程名字还会出现 xff0c 比如spark提交应用时的SparkSubmit 这是因为当前进程有其它子进程依赖 此时可以根据进程名字彻底删除 xff0c 这里我提供了一份模板 xff1
  • Python中Json文件的写入与读取

    字典写入Json文件 xff0c 代码如下 xff1a import json sparkConfDict 61 39 defaultMaxSplitBytes 39 defaultMaxSplitBytes 39 openCostInBy
  • Python获取当前工作目录以及改变工作目录

    import os print os getcwd 获取并打印当前工作目录 os chdir 34 目标目录 34 修改当前工作目录为目标目录
  • Linux 手动杀VNC进程

    步骤 方法一 1 查VNC进程 span class token function ps span ef span class token operator span span class token function grep span
  • 记录我重新安装ORBSLAM2和PX4的过程

    1 背景 xff1a 今天卸载了Ubuntu16 04 xff0c 重新装了一个Ubuntu18 04 xff0c 成功做完系统之后需要把之前的备份恢复 我的备份比较粗暴 xff0c 就是直接把 home里的文件都先复制到Windows下
  • 【网络干货】最全BGP路由协议技术详解

    一 BGP 的基本概念 自治系统AS xff08 Autonomous System xff09 AS 是指在一个实体管辖下的拥有相同选路策略的 IP 网络 BGP 网络中的每个 AS 都被分配一个唯一的 AS 号 xff0c 用于区分不同
  • Python正则表达式之 - ?: / ?= / ?!

    用圆括号将所有选择项括起来 xff0c 相邻的选择项之间用 分隔 但用圆括号会有一个副作用 xff0c 使相关的匹配会被缓存 xff0c 此时可用 放在第一个选项前来消除这种副作用 其中 是非捕获元之一 xff0c 还有两个非捕获元是 61
  • Python教程:无参装饰器

    一 xff1a 储备知识 1 args xff0c kwargs span class token keyword def span span class token function index span span class token
  • 面向对象:类关系(泛化/实现/依赖/关联/聚合/组合)

    泛化 泛化 xff0c 也称作继承关系 指面向对象中派生类与基类之间的关系 xff0c 一个类 xff08 称为子类 子接口 xff09 继承另外的一个类 xff08 称为父类 父接口 xff09 的功能 指ClassA为ClassB Cl
  • webpack基本概念及使用

    webpack是什么 xff0c 用来干什么 xff1f webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具 xff1b webpack的下载安装 官网文档地址 xff1a https webpack js o
  • stlink制作(OSHW版)

    stlink制作安排 视频在我的B站 工程主页在开源硬件平台 0 项目原由 因为我那个板载stlink的NANO板近期要还给老师了 所以我就没有板子和stlink了 xff0c 但是对于一个stmer来说 xff0c 怎么能没stlink呢
  • JS对象销毁

    JS中对象销毁需要注意的几个方面 1 销毁你创建的其他对象 xff0c 并切断应用 2 解绑绑定事件 3 this上的成员变量 xff0c 需要切断引用的要切断 4 有继承时 xff0c 需要调用父类的销毁方法 5 清除dom结构
  • px4初级视频

    链接 xff1a https pan baidu com s 1VIQcOQt I5 evMx1jnV0ZQ 提取码 xff1a 8niq
  • 找工作、备考、面试刷题网站推荐(牛客网、力扣、计蒜客、hihocoder、七月在线)以及acm竞赛oj

    不管是找工作笔试面试白板试进大厂 xff0c 还是研究生参加初试复试 xff0c 数据结构和算法都是都是重中之重 xff0c 刷题就很必要 xff0c 来拿走自己的offer 吧 xff01 一 offer刷题推荐 1 牛客网 链接 xff
  • 安装Homebrew报错 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused

    网上有很多方式 xff0c 这里只说自己解决的方式 xff0c 只针对mac 1 打开网站 https www ipaddress com 查询 raw githubusercontent com 对应的ip地址 2 将查询出来的地址映射加
  • Opencv C++ Tutorial for making your own Haar Classifier

    Opencv C 43 43 Tutorial for making your own Haar Classifier This Opencv C 43 43 Article is about how to make your own Ha

随机推荐