版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

  • 回文数长度为6。
  • 根的长度为3,根的范围是[100, 1000)。
  • 回文数从小到大的顺序为:100001,101101,102201,103201,301,... 999999。

奇数长度示例:

  • 回文数长度为5。
  • 根的长度为3,根的范围是[100, 1000)。
  • 回文数从小到大的顺序为:10001,10101,10201,10301,99999。

...

  • 5253. 找到指定长度的回文数 - 力扣(LeetCode)
    • 思路:根据回文数长度可以确定根的长度,从而得到根的范围,对于每个查询,如果超出了根的范围,直接返回-1,如果未超出,则先求出对应的根,再直接构造对应的回文数。

      展开
      代码块
      class Solution {
          // 构造长度为len的第k个回文数,k从0开始计数
          long long buildKthPalindrome(int len, int k) {
              int root_len = (len / 2) + (len % 2);
              long long root = pow(10, root_len - 1) + k;
              string left = to_string(root);
              string right(left.rbegin(), left.rend());
              string all;
              if(len % 2 == 0) {
                  all = left + right;
              } else {
                  all = left + right.substr(1);
              }
              return stoll(all);
          }
      
      public:
          vector<long long> kthPalindrome(vector<int>& queries, int intLength) {
              vector<long long> ans;
              int root_len = (intLength / 2) + (intLength % 2);
              int min_root = pow(10, root_len-1);
              int max_root = pow(10, root_len);
              for(auto &q : queries) {
                  if(min_root + q > max_root) {
                      ans.push_back(-1);
                  } else {
                      ans.push_back(buildKthPalindrome(intLength, q-1));
                  }
              }
              return ans;
          }
      };