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 ...
随机推荐
- Nacos 高级详解:提升你的开发和部署效率
Nacos 高级 一 .服务集群 需求 服务提供者搭建集群 服务调用者,依次显示集群中各服务的信息 搭建 修改服务提供方的controller,打印服务端端口号 package com.czxy.co ...
- scratch源码下载 | 蜘蛛传说
程序说明: <蜘蛛传说>是一个通过Scratch平台制作的互动游戏项目.在这个故事中,玩家将扮演一只蜘蛛,其原本和平的生活被一只入侵的壁虎所打破.为了保卫自己的家园,蜘蛛必须运用智慧和勇气 ...
- 痞子衡嵌入式:MCUXpresso IDE下在线联合调试i.MXRT1170双核工程的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下在线联合调试i.MXRT1170双核工程的三种方法. 两年前痞子衡写过一篇<i.MXRT1170下在 ...
- Http、Https简介和Session、token的请求流程
Http Http (超文本输出协议) 是一种分布式.协作式和超媒体信息系统的应用层协议,它通常运行在TCP之上,因特网应用最广泛的便是Http协议,所有www都遵循这个标准.主要用于Web 浏览器与 ...
- 网友开放的开源项目:网页版的A*算法可视化演示程序
相关项目: https://xueqiaoxu.me/#projects 项目介绍: A JavaScript path-finding library for grid based games. I ...
- mojo编程语言:mojo调用python库及内置函数builtins
编程语言mojo调用python十分方便,mojo不仅可以调用python的库函数更可以调用python的内置函数(builtins),给出示例代码: from python import Pytho ...
- 局域网中linux和window共享文件方案——samba
注明: 曾经写过:局域网中如何为Ubuntu20.04和window10共享文件,本文可以视作为该篇的续篇. 本文主要内容为Samba软件的安装和配置,以及相关的磁盘操作. 注意:(硬盘的UUID会受 ...
- 旧物利用 - 将机顶盒改造为一台Linux开发机!
前言 机顶盒型号:移动魔百盒CM201-2(CH),芯片组: hi3798mv300(hi3798mv3dmm),其他型号类似 理论上适用于以下SOC:Hi3798Mv100 / Hi3798Cv20 ...
- SpringBoot 整合线程池
分为三步 启动类加 @EnableAsync 注解 在方法上加 @Async 注解 创建线程池配置类 1.启动类加 @EnableAsync 注解 @SpringBootApplication @En ...
- 2023 ICPC 合肥游记
board zsy 11.24 开始嗓子疼了,但可以忍受.晚上睡的很不舒服 11.25 起床就开始难受,还得骑车到地铁站,应该打个车来着.不过路上拍到了很好看的朝霞(写到这里才想起来还没发朋友圈给 t ...