欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据结构算法(字符串转整数和回文数)

程序员文章站 2024-01-03 23:43:04
08字符串转整数题目描述:分析:本题主要是字符串的处理。需要注意以下几点:去除字符前的空字符第一个有效字符必须是符号或者数字只能有一个符号注意数值越界所以在具体处理的时候,你可以截取一个字符然后直接转成一个数字类型(考虑越界)但是并不推荐。这里个人使用遍历字符串数字字符时候将其与'0'字符差转换成数字进行计算,当超出int范围直接停止。通过代码为:public static int myAtoi(String str) {int zheng = 1;int ind...

维护公众号:bigsai ,点赞再看,养成习惯!

08字符串转整数

题目描述:
数据结构算法(字符串转整数和回文数)
数据结构算法(字符串转整数和回文数)
数据结构算法(字符串转整数和回文数)
分析:

本题主要是字符串的处理。需要注意以下几点:

  • 去除字符前的空字符
  • 第一个有效字符必须是符号或者数字
  • 只能有一个符号
  • 注意数值越界

所以在具体处理的时候,你可以截取一个字符然后直接转成一个数字类型(考虑越界)但是并不推荐。这里个人使用遍历字符串数字字符时候将其与'0'字符差转换成数字进行计算,当超出int范围直接停止。

通过代码为:

public static int myAtoi(String str) { int zheng = 1; int index=0; long value=0; while (index<str.length()&&str.charAt(index)==' ') {//防止"" 和 "   "等 index++; } if(index>str.length()-1)return 0; if(str.charAt(index)=='+') {index++;} else if (str.charAt(index)=='-') { zheng=-1;index++; } for(int j=index;j<str.length();j++) { if(str.charAt(j)>='0'&&str.charAt(j)<='9') { value=value*10+str.charAt(j)-'0'; if(value*zheng>Integer.MAX_VALUE)return Integer.MAX_VALUE; if(value*zheng<Integer.MIN_VALUE)return Integer.MIN_VALUE; } else { break; } } value=zheng*value; return (int)value; } 

09回文数

描述:

  1. 回文数
    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

分析:
此题比较简单,需要考虑以下几点:

  • 不能是负数,负数不满足回文数的要求
  • 考虑奇数偶数长度数字会文性

提供两种方法:第一种将数字转成字符串,从中间向两侧拓展比较。
数据结构算法(字符串转整数和回文数)
实现代码为:

//11% public boolean isPalindrome(int x) { if(x<0)return false; String va=x+""; int left=0,right=0; if(va.length()%2==0) { left=va.length()/2-1;right=left+1; } else { left=va.length()/2;right=left; } while (left>=0) { if(va.charAt(left)!=va.charAt(right)) return false; left--;right++; } return true; } 

但很遗憾这种方法效率比较低只能打败11%的人呢,大概18ms左右。

但是可以换一种思路,使用字符串比较效率较低。可以使用数字类型计算一遍得到逆向数值然后进行比较最终值是否相同:
数据结构算法(字符串转整数和回文数)

public boolean isPalindrome(int x) { if(x<0)return false; int team=x; int va=0; while (x>0) { va=va*10+x%10; x/=10; } if(va==team)return true; return false; } 

这样就大概9-10ms左右,9ms大概打败98%而10ms只40%多。
数据结构算法(字符串转整数和回文数)

最后

本周打开结束,本周打开题解为:

05最长回文串
06Z字形变换&07整数反转

本文地址:https://blog.csdn.net/qq_40693171/article/details/108034978

上一篇:

下一篇: