编程之法第一章【回文判断+字符串转化成整数】

判断是否是回文 public class Test02 { public static void main(String[] args) { Integer i = 32123; palindrome(i); } public static void palindrome(Object object) {//传入一个Object对象,可以传基本数据类型也可以传字符串 String string = object.toString(); 阅读详情

字符串转化成整数


字符串转化成整数是个比较容易的问题,比较刺手的问题就是可能会溢出、所以第一章中对溢出处理的技巧比较妙。

int型值的最大值为max_int=2147483647。如果直接转化的时候n*10+c可能就会大于max_int。所以我们可以通过除法了防止溢出。如果n>max_int/10.那么n*10肯定大于max_int了,但是n这时候还没有大于max_int。所以可以通过n>max_int来提前结束判断防止溢出。如果n==max_int的时候就要判断n>max_int%10.当然这是对于正数来说的,int型的最小值等于-(max_int)-1;


#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

int strToInt(const char*str){
	
	static const int MAX_INT=(int)((unsigned)~0>>1);
	static const int MIN_INT=-(int)((unsigned)~0>>1)-1;
	unsigned int n=0;
	
	//处理是否为空 
	if(str==0) return 0;
	//空格 
	while(isspace(*str)) ++str;
	//处理正负
	int sign=1;
	if(*str=='+'||*str=='-'){
		if(*str=='-') sign=-1;
		str++;
	} 
	while(isdigit(*str))
	{
		int c=*str-'0';
		if(sign>0&&(n>MAX_INT/10||(n==MAX_INT/10&&c>MAX_INT%10))){
			n=MAX_INT;
			break;
		}
		else if(sign<0&&(n>(unsigned)MIN_INT/10||(n==(unsigned)MIN_INT/10&&n>
		(unsigned)MIN_INT%10))){
			n=MIN_INT;
			break; 
		}
		n=n*10+c;
		str++;
	}
	return sign>0?n:-n;
}
int main(){
	
	char s[20]={'1','2','3','4','5','9','9','9','9','9','9','9','9','9','9'};
	cout<<strToInt(s)<<endl;
	
}


回文判断


这也是个很简单很基础的问题了,但是如果字符串很长的话就要用到mancher了,这个方法在暑假的时候看过,但是已经忘得差不多了,现在重新看的话还是有那么一点印象。所以处理起来没有那么刺手。就是细节需要注意。

先说基础的做法吧。就是暴力判断,但是要主要分两种情况,回文长度为奇数和偶数的时候。

#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

int longestPalindrome(const char*s,int n) {
	int i,j,max,c;
	if(s==0||n<1) {
		return 0;
	}
	max=0;
	for(i=0; i<n; i++) {
		for(j=0; i>=j&&i+j<n; j++) {
			if(s[i-j]!=s[i+j]) {
				break;
			}
			c=2*j+1;
		}
		max=max>c?max:c;

		for(j=0; i>=j&&(i+j+1<n); j++) {
			if(s[i-j]!=s[i+j+1]) break;
			c=2*j+2;
		}
		max=max>c?max:c;
	}
	return max;
}

int main(){
	
	char s[10]={'a','s','d','d','s','v'};
	cout<<longestPalindrome(s,6)<<endl;
}


Manacher方法,详细的不说了,有一点需要注意的地方,就是为了更好地处理越界的问题,把第一个字符设为‘$’,当然前提是你的字符串里面没有这个字符。为什么呢?因为s[i-p[i]]这里会越界。

图书馆要闭馆了,就这样了。。。

#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;
int p[50];
int Manacher(const char *s,int n){
	
	int i,j,max=1,mx=0,id;
	for(i=1;i<n;i++){
		if(mx>i){
			p[i]=min(p[2*id-i],mx-i);
		}
		else{
			p[i]=1;
		}
		while(s[i+p[i]]==s[i-p[i]]) p[i]++;
		if(p[i]+i>mx){
			mx=p[i]+i;
			id=i;
		}
	}
	for(int i=0;i<n;i++){
		max=max>p[i]?max:p[i]; 
	}
	return max;
}

int main(){
	char s[50]={'1','2','2','1','2','3','2','1'};
	char ss[50];
	int k=0;
	ss[k]='$';
	for(int i=0;i<8;i++){
		ss[k++]='#';
		ss[k++]=s[i];
	} 
	ss[k++]='#';
	cout<<Manacher(ss,k)-1<<endl;
}




回文数+整数反转 Leetcode9-回文数 function isPalindrome(x){ // 1. 先把数字转化成字符串 // 2. 然后split()让字符串拆分成数组,再reverse()反置数组 // 3. 然后再join()拼接起来,再转化为数字 return x === Number(x.toString().split('').reverse().join("")) } Leetcode7-整数反转 // 题目 数值范围为 [−2^31, 2^31 − 1] 如果 阅读详情

相关推荐

无网络环境部署:手动获取并安装OneNote for Windows 10完整指南

本文提供了一份详尽的OneNote for Windows 10离线安装指南。针对无网络或内网隔离环境,详细介绍了如何从官方渠道获取正确的产品ID,利用第三方工具下载纯净的.appxbundle安装包,并解决系统兼容性与依赖框架问题。最后,通过PowerShell管理员命令完成安全部署,是IT管理员和高级用户在离线环境下部署UWP应用的实用参考。

loss4bartender的博客 495

稀疏数组和二维数组的相互转换

二维数组转化为稀疏数组: //创建一个原始二维数组 //0表示无子,1表示黑子,2表示白子 int arr[][]=new int[11][11]; arr[1][2]=1; arr[2][3]=2; for (int arr1[] :arr){ for (int data:arr1){ System.out.printf("%d\t",data);

liubingle的博客 317

AP发票批量付款程序(WEB ADI)

CREATE OR REPLACE PACKAGE MEW_AP_BATCH_PAYMENTS_PKG IS   PROCEDURE MAIN(P_BATCH_ID          NUMBER                 ,P_ORG_ID            NUMBER                 ,P_BANK_ACCOUNT_NAME VARCHAR2

储藏室 5051

[LeetCode]C++判断一个整数是否为回文数(不用字符串的解法)

这是本次课程的第一次博客,所以就选了一个比较简单的回文数来试一下水 判断回文数 题目非常简单明了就不多说了 按一般的想法,解决回文数问题是要用到字符串的,但是碰巧看到题目里有进阶说能不能不用字符串来解决,细细一想好像还真的很简单 为了判断回文数,我们只需要判断一个整数某些数位上的数字是否相等即可 比如说对于一个长度为length的整数,那么只需要用一个循环遍历length/2个长度 ...

banyeyeye的博客 7198

在安装之后使用labelme出现qtpy.PythonQtError:No Qt bindings could be found错误

我在base环境(python3.7)可成功安装和使用labelme,而在同py37版本和py36的虚拟环境中可安装labelme包,但在使用的时候出现报错,如下: 我尝试着去解决第一个错误提示,错误提示为:moduleNotFoundError:No module named ‘PySide’,结果掉入了一个无止无尽的坑,看到网上有朋友说这个只能在py27-py35才能安装,还有说需要VC+ 140等,他们说的这个解决方案只针对于这个缺包的描述,而我们仅仅只需要一个labelme,因此我直接对后面的错误

qq_33538651的博客 9815

【模型】OpenClaw 接入阿里云永久免费模型方案

Qwen2.5-7B-Instruct 模型为例。

海兰 4472

判断一个整数是不是回文数

  首先有以下几个问题需要考虑: 1. 负数是不是回文数?这里假设负数不是回文数。 2. 如果要求不能用额外的存储空间怎么办? 下面的代码给出四种方法: View Code 1 #include <iostream> 2 #include <cassert> 3 #include <limits> 4 #inclu...

dayi5933的博客 154

微波技术仿真:微波谐振器分析_(2).微波谐振器理论

谐振器是一种能够在特定频率范围内存储和释放电磁能量的器件。在微波频段,谐振器通常用于滤波、频率选择和能量存储等应用。一个理想的谐振器在谐振频率下能够存储无限大的能量,但在实际应用中,由于损耗的存在,谐振器的性能会受到一定限制。微波谐振器在微波通信、雷达系统、微波测量和微波电路设计等领域中发挥着重要作用。谐振器的设计需要考虑多个因素,包括谐振频率的精确控制、损耗的最小化、频率稳定性的提高和小型化设计。通过理论分析和仿真工具的使用,可以有效优化谐振器的性能,满足实际应用的需求。

2401_87715305的博客 934

PTA Java程序设计-选择-回文数(一种非常方便的判断回文数的方法)

这是一个编程题模板。编写程序,判断一个三位的整数是否为回文数。如果一个数字从左到右以及从右到左都是一样的,这个数字称为回文数,例如,121,-111。负数的处理和正数一样。

2301_76957925的博客 787

【零基础入门unity游戏开发——unity通用篇30】Resources资源加载(基于unity6开发介绍)

Resources资源加载(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4116

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 312

LeetCode刷题——回文数

题目描述:           判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。           示例 1:           输入: 121           输出: true           示例 2:           输入: -121           输出: false           解释: 从左向右读, 为 -121 ...

论程序员的自我修养的博客 6851

黑猫带你学eMMC协议第12篇:生产状态感知(PSA)

1 概述 1.1 什么是PSA Production State Awareness (PSA) 生产状态感知 e•MMC设备可以利用其是否在生产环境中的信息,从而在现场运作时进行不同的操作。 例如,在设备低温焊接(soldering)前,将数据写入emmc,可能导致数据出错,而正在焊接期间写入数据,出错的概率可能会更大。在低温焊接之前,emmc设备可以使用一种特定的内部操作去加载内容,这样就能减少数据出错的概率,而在低温焊接后进行常规的操作就行了。 1.2 psa如何进行工作? PSA存在于emmc5.0

黑猫奥利奥的博客 4259

Python学习日记——回文数(整数转为字符串)

Python学习日记005——回文数(字符串方法) 题目来源:LeetCode题库——回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 Example1: 输入:121 输出:true Example2: 输入:-121 输出:false Example3: 输入:0 输出:true 链接:https://leetcode-cn.com/problems/palindrome-number 前面的博文中,我们通过借助整数反转的方法判断一个数是否为回文数。本文提

weixin_43872060的博客 367

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

1079 延迟的回文数

给定一个 k+1 位的正整数 N,写成 a ​k ​​ ⋯a ​1 ​​ a ​0 ​​ 的形式,其中对所有 i 有 0≤a ​i ​​ &lt;10 且 a ​k ​​ &gt;0。N 被称为一个回文数,当且仅当对所有 i 有 a ​i ​​ =a ​k−i ​​ 。零也被定义为一个回文数。 非回文数也可以通过一系列操作变出回文数。首先将该数字逆转,再将逆转数与该数相加,如果和还不是一个回文数...

weixin_44270812的博客 246

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode 3:求回文数(数字与字符串的相互转换)

题目: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 解法1: 将数转换为字符串 #include <sstream&

qq_42292537的博客 280

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[每日一题]--回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true;否则,返回 false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121。从右向左读, 为 121-。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01。因此它不是一个回文数。

xiaowutongxue666的博客 542

LeetCode题解-回文数的五种Python解法

LeetCode题解-回文数的五种Python解法

算法之美 569

leetcode 9 回文数字

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶...

sjc7140的博客 163

【回文数】算法优化笔记

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数(不将整数转为字符串来解决)。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读...

Edward的博客 756

蓝桥杯真题 回文日期 python

历届真题 回文日期【第十一届】【省赛】【B组】试题解析2020 年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd” 的格式写成一个8 位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202 即2021年12月2日。 也有人表示20200202 并不仅仅是一个回文日期,还是一个

冷烬亿下 2776

Leetcode回文数算法与分析

@Leetcode回文数 回文一直是很诗意的艺术形式,我们可以看到诸如 “雪映梅花梅映雪,莺宜柳絮柳宜莺” 这样的回文对联,在算法分析中,回文数的写法同样是极富有诗意的。 先看题干: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。能不将整数转为字符串来解决这个问题吗?(进阶要求) 示例如下: 输入: 121 输出: true 输入: -121 输出:...

Maple_PI的博客 393

回文总结

在三种方法之前,须知:所有负数都不是回文!并且以0为结尾都不是回文。 于是有x<0||(x%10==0&&x!=0) 方法一 转换字符串判断 将int型整数转化成字符串,再逐个字符判断。 class Solution { public: bool isPalindrome(int x) { bool result; if (x < 0) { return false;

Matcha_的博客 251

力扣 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 示例 1: 输入:x = 121 输出:true 示例 2: 输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。 示例 4: 输

qq_43542818的博客 244

LeetCode刷题之回文数

LeetCode刷题回文数

人生错觉 188
上一篇: 字符串的全排列
下一篇: 编程之法第二章【快速排序的两种方法】
BIGKAKA
博客等级 码龄11年 32粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值