首页 > 其他分享 >2217. 找到指定长度的回文数

2217. 找到指定长度的回文数

时间:2023-04-09 10:12:37浏览次数:37  
标签:2217 int num base str half 长度 intLength 回文

题目描述

给了一个正整数k,表示长度是k的所有回文数字
再给了和很多q,问第q小的数字是多少?

f1 数学关系+构造

基本分析

  1. 从q之间的相互关系考虑还是单独考虑某个q和结果的关系?后者
  2. 长度是k的回文数字有啥特性?前一半数字是固定的,half = k + 1 >> 2, str[num][:half]
  3. 以上性质和q有啥关系?前一半数字可以通过q构造出来。base = 10 ** (half - 1) - 1,比如k=5, half=2,base = 99,第1小的3位数字是100,构造出第1小的5位是100001;
  4. 奇偶不同会影响啥?(1)half的长度,(2)构造出来前一半后恢复会原来数字的方式
  5. 为啥奇偶不同不会影响前半部分的大小,毕竟位数不一样?对给定的k,前半部分half也是相同的,大家比的位数是一样的
  6. 有没有不存在的可能,如何考虑?有,比如q很大,不存在;base + q不能超过位数的限制,也就是base + q 最大是 10 ** half - 1

代码

class Solution:
    def kthPalindrome(self, queries: List[int], intLength: int) -> List[int]:
        half = (intLength + 1) // 2

        base = 10 ** (half - 1) - 1
        limit = 10 ** half - 1

        def recover(intLength, num):
            if intLength % 2 == 0:
                return int(str(num) + str(num)[::-1])
            else:
                return int(str(num)[:-1] + str(num)[::-1])

        ans = []
        for q in queries:
            num = base + q
            if not num > limit:
                ans.append(recover(intLength, num))
            else:
                ans.append(-1)
        
        return ans

总结

  1. 利用回文的性质找前一半,满足严格增的关系
  2. 利用q和base构造出前一半,注意有上限
  3. 恢复前一半

标签:2217,int,num,base,str,half,长度,intLength,回文
From: https://www.cnblogs.com/zk-icewall/p/17299878.html

相关文章

  • 链表的回文判断—Java实现
    对于这个题,主要是老是局限于方法内的变量,未想到借助外部变量辅助:具如下,不可用数除法,会溢出异常:即使是取最大的long也会溢出,常规方法不再赘述,具体以代码如下:1packageProblemSolve;23publicclassSolution5{4privateListNodefrontNode;5publicboolean......
  • Flutter Dart数组固定长度分割成二维数组
    将dart数组按照指定的长度分割,返回一个二维数组,实现list的split功能.例如:a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]splitList(a,6):[[0,1,2,3,4,5],[6,7,8,9,10,11],[12,13,14,15,16,17],[18,19]] Dart方法代码:......
  • 在发送数据头部加上内容长度解决TCP 数据粘包
    在学习网络编程socket章节时,发现在客户端向服务器端发送数据时有时可能出现粘包的问题,因此这里记录一下通过添加数据头的方式解决粘包问题。首先什么是数据粘包?其实之所以出现粘包问题,往往是因为网络问题,或者发送端与接收端发送/接收频率不对等引起的因为TCP协议是传......
  • 回文日期
    2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd”的格式写成一个8位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后......
  • CAD如何测量连续线段长度?CAD测量连续线段长度步骤
    在CAD绘图过程中,经常会绘制一些连续的线段,如果想要知道这些连续线段长度的话,该怎么操作吗?CAD如何测量连续线段长度?下面小编就以浩辰CAD软件为例来给大家分享一下CAD测量连续线段长度的具体操作步骤吧!CAD测量连续线段长度步骤:浩辰CAD软件中已经考虑到了这种需求,在CAD测量命令(DIST......
  • 回文自动机
    概念回文自动机,PAM,又叫回文树。用于处理和回文子串有关的问题,和SAM有一些类似的地方。构造首先PAM上的每个结点代表原串的一个回文子串。根据神秘结论,原串本质不同的回文子串至多有\(n\)个,也就是PAM的点数至多是\(n+2\),边数至多是\(n\).考虑到回文串的奇偶性会......
  • python split()截取一部分的字符串及按照指定字符或者长度 截取字符串
     str='https://www.baidu.com/pdf/abcdefg.pdf'#输出字符串,>>>https://www.baidu.com/pdf/abcdefg.pdfprint(str)#做为一个整体截取,>>>['https://www.baidu.com/pdf/abcdefg.pdf']print(str.split())#把字符串分割,>>>[&......
  • 39. 组合总和 40.组合总和II 131.分割回文串
    39.组合总和自己写的回溯算法:classSolution{List<List<Integer>>list;LinkedList<Integer>res;publicList<List<Integer>>combinationSum(int[]candidates,inttarget){list=newArrayList<>();res=......
  • 无重复字符的最长子串的长度
    题目链接解题思路假设有个字符串"abcabca"首先读懂题目,字符指的是个单个字母'a''b'这种,子串指的是"ab""abc""abca","ac"不是子串,所以要求是连续的。无重复字符的意思就是指"abc"中没有一样的字符,而"abca"有两个'a'就重复了。最直接的思路是使用滑动窗口,......
  • 类型长度
    基础知识一字节8位=8bit如32位机器,那么这32位就代表一个字什么叫一个字如:你输入的某个数字,如'1'就表示一个字,在机器中占有32位,这32位为4字节,这4个字节就表示一个字但是不一定是8个字节表示一个字,要看为多少字节的机器,如果是64位机器,就是8字节表示一个字总之就是在n位机......