LeetCode 564. Find the Closest Palindrome (构造)
题意:
给一个数字n 求离n最近(且不等)的回文串 存在多个答案返回最小的
首先很容易想到
将数字分为两段,如 12345 -> 123/45,然后将后半段根据前面的进行镜像重置 123/45 -> 12321
那,如果数字刚好是回文串,就把前半段-1就好了
但是存在以下例外,就是当前半段 +1 或 -1 就会造成进位
10999
10901-10999 = -98
11011 - 10999 = -12
可以发现是因为9存在的进位,同样0也可能,所以对前半段进行 +1 和 -1 两种处理,然后选择差比较小的那个。
代码写的比较乱= =
class Solution {
public:
string nearestPalindromic(string n) {
typedef long long ll;
if (n == "10" || n == "11") return "9"; int l = n.size();
int half = (l + 1) / 2;
string left = n.substr(0, half);
string right = n.substr(half); // 情况1: 直接镜像翻转
string ans1 = (l & 1) ? left + rev_str(left).substr(1) : left + rev_str(left);
// 如果和原数字相同则不可用
ll diff1 = ans1 == n ? stoll(n) : abs(stoll(ans1) - stoll(n)); // 情况2: -1
string left_sub_1 = to_string(stoll(left) - 1);
string rleft_sub_1 = rev_str(left_sub_1);
string ans2;
if (left_sub_1.size() < half) {
ans2 = (l & 1)
? left_sub_1 + rleft_sub_1
: left_sub_1 + "9" + rleft_sub_1;
}
else {
ans2 = (l & 1)
? left_sub_1 + rleft_sub_1.substr(1)
: left_sub_1 + rleft_sub_1;
}
ll diff2 = abs(stoll(ans2) - stoll(n)); // 情况3: +1
string left_add_1 = to_string(stoll(left) + 1);
string rleft_add_1 = rev_str(left_add_1);
string ans3;
if (left_add_1.size() > half) {
ans3 = (l & 1)
? left_add_1 + rleft_add_1.substr(2)
: left_add_1 + rleft_add_1.substr(1);
}
else {
ans3 = (l & 1)
? left_add_1 + rleft_add_1.substr(1)
: left_add_1 + rleft_add_1;
}
ll diff3 = abs(stoll(ans3) - stoll(n)); if (diff2 <= diff1 && diff2 <= diff3) return ans2;
if (diff1 <= diff2 && diff1 <= diff3) return ans1;
return ans3;
} string rev_str(string a) {
string b(a);
reverse(b.begin(), b.end());
return b;
}
};
LeetCode 564. Find the Closest Palindrome (构造)的更多相关文章
- leetcode 564. Find the Closest Palindrome
leetcode564题目地址 Given an integer n, find the closest integer (not including itself), which is a pali ...
- 【leetcode】564. Find the Closest Palindrome
题目如下: 解题思路:既然是要求回文字符串,那么最终的输出结果就是对称的.要变成对称字符串,只要把处于对称位置上对应的两个字符中较大的那个变成较小的那个即可,假设n=1234,1和4对称所以把4变成1 ...
- 564. Find the Closest Palindrome
Given an integer n, find the closest integer (not including itself), which is a palindrome. The 'clo ...
- 乘风破浪:LeetCode真题_016_3Sum Closest
乘风破浪:LeetCode真题_016_3Sum Closest 一.前言 这一次,问题又升级了,寻找的是三个数之和最靠近的某个数,这是非常让人难以思考的,需要把三个数相加之后和最后给的目标 ...
- Leetcode:1008. 先序遍历构造二叉树
Leetcode:1008. 先序遍历构造二叉树 Leetcode:1008. 先序遍历构造二叉树 思路 既然给了一个遍历结果让我们建树,那就是要需要前序中序建树咯~ 题目给的树是一颗BST树,说明中 ...
- [LeetCode] Find the Closest Palindrome 寻找最近的回文串
Given an integer n, find the closest integer (not including itself), which is a palindrome. The 'clo ...
- [Swift]LeetCode564. 寻找最近的回文数 | Find the Closest Palindrome
Given an integer n, find the closest integer (not including itself), which is a palindrome. The 'clo ...
- Codeforces Round #185 (Div. 2) C. The Closest Pair 构造
C. The Closest Pair Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/312/p ...
- [LeetCode][Python]16: 3Sum Closest
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 16: 3Sum Closesthttps://oj.leetcode.com ...
- 【一天一道LeetCode】#16. 3Sum Closest
一天一道LeetCode系列 (一)题目: Given an array S of n integers, find three integers in S such that the sum is ...
随机推荐
- NOIP2022退役记
我是青岛西海岸新区的一名oier,qxyz(xhayz)的. (其实也不知道算不算得上真正的oier) 已经高二了,是最后一次noip了,必须写点什么记录一下了吧,这样至少可以向世界留下一点痕迹:这个 ...
- selenium屏蔽启动浏览器启动时的提示信息
代码 from selenium import webdriver from selenium.webdriver import Remote from webdriver_helper import ...
- vue 路由缓存 keep-alive include和exclude无效
<keep-alive :include="keepAliveData"> <router-view v-if="isShowRouter" ...
- docker 将镜像发布到网络
1.发布自己的镜像 hub.docker.com 创建账号 docker login -u supermao -p xxxx docker tag ls supermaofox/ls:1.0 先打标签 ...
- python对象之间的交互
python对象之间的交互 先看看一般的类定义如下: class 类名: def __init__(self,参数1,参数2): self.对象的属性1 = 参数1 self.对象的属性2 = 参数2 ...
- SpringBoot配置过滤器、拦截器
拦截器概述 Spring Boot提供了一种简单且强大的方式来定义和使用拦截器(Interceptor).Spring Boot的拦截器基于Spring框架的拦截器机制,可以在请求的处理过程中插入自定 ...
- 【微信小程序】04 生命周期 & 事件
一.应用生命周期: https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html App(Object object) ...
- Ubuntu 18.04.4 导入docker镜像,启动镜像,保存容器为镜像,导出镜像
1. 查看 docker 版本 sudo docker version 2. 查看本地库中的镜像 sudo docker images 3. 查看 正在运行的 容器 sudo docker ...
- 强化学习、分布式计算方向的phd毕业后去企业的要求
实验室慕师弟马上要phd毕业了,虽然我是遥遥无期,但是看到身边同学可以上岸还是提师弟高兴.由于师弟准备去企业工作,于是乎我也不免好奇起来phd毕业后去公司会有什么样的要求,于是网上找了找招聘信息,挑了 ...
- Leetcode: 586. Customer Placing the Largest Number of Orders
题目要求如下: 给出的例子如下: 简单地说就是要找出表中订单最多客户的ID. 使用如下的代码进行实现: import pandas as pd def largest_orders(orders: p ...