- 首先我们要除去两端的空格
- 关于第一个的字符我们有四种可能 1 + 2 - 3 数字 4其他字符
- 我们的数据可能超过了int的范围的处理
class Solution { public int strToInt(String str) { str=str.trim(); char arr[]=str.toCharArray(); int len=str.length(); if(len<=0) return 0; boolean flag= arr[0]=='-'? true:false;//坑1 long ans=0;//坑2 for(int i= arr[0]=='-'||arr[0]=='+'? 1:0;i if(!Character.isDigit(arr[i])){ break; } if(flag){ ans=ans*10-(arr[i]-'0'); }else{ ans=ans*10+(arr[i]-'0'); } if (ans > Integer.MAX_VALUE) return Integer.MAX_VALUE; if (ans < Integer.MIN_VALUE) return Integer.MIN_VALUE; //坑3 } return (int) ans; } }剑指 Offer 20. 表示数值的字符串
class Solution { public boolean isNumber(String s) { if(s==null||s.length()==0) return false; s=s.trim(); boolean numFlag=false; boolean dotFalg=false; boolean eFlag=false; for(int i=0;i if(s.charAt(i)>='0'&&s.charAt(i)<='9'){ numFlag=true; }else if(s.charAt(i)=='.'&&!dotFalg&&!eFlag){ dotFalg=true; //出现了.,前面没出现e,且没有出现过. }else if((s.charAt(i)=='e'||s.charAt(i)=='E')&&!eFlag&&numFlag){ //出现了e,我们要判定前面没有出现过e,并且出现了数字 eFlag=true; numFlag=false;//为了避免123e这种请求,出现e之后标志为false }else if((s.charAt(i)=='+'||s.charAt(i) == '-')&& (i==0||s.charAt(i-1)=='e'||s.charAt(i - 1) == 'E')){ }else{ return false; } } return numFlag; } }
- 首先不管哪种情况都必须要有数字,没有数字肯定不对,其次对于存在 e 的情况,接收到 e 时已经判断前面有数字了,并将 numFlag 重置,意味着当接收到 e 后,如果后面没有数字(没有将 numFlag 重新标记为真),那么也是不对的。
剑指 Offer 44. 数字序列中某一位的数字
/* 数字范围 数量 位数 占多少位 1-9 9 1 9 10-99 90 2 180 100-999 900 3 2700 1000-9999 9000 4 36000 ...比如4399为例子
- 先不去考虑0这个数
- 首先我们知道一个几位数占多少位是由数量*位数 4399>9,所以不是一位数的范围
- 4399>180+9 所以也不是 二位数的范围
- 4399>2700+180+9,所以也不是三位数的范围
- 4399<36000+2700+180+9,所以可以确定是四位数
- 在四位数中的哪个四位数呢,我们知道第一个四位数是1000,4399-2700-180-9=1510
- 我们要确定是在那个数,我们知道距离四位数的第一个数字的距离是1510,一个四位数占四个数字,所以应该是(1510-1)/4=377,为什么减1,因为我们是没有考虑0的,所以应该减去
- 然后得到n在1000+377=1377中的那个数字那个数字,1509%4=1,所以是3
class Solution { public int findNthDigit(int n) { int dight=1;//用来记录n所在数字的位数 long start=1;//数字范围开始的第一个数 long count=9;//占了多少位 while(n>count){ n-=count; dight++; start*=10; count=dight*start*9; } long num=start+(n-1)/dight; return Long.toString(num).charAt((n-1)%dight)-'0'; } }- 相关阅读:
Java Stack 类
【Go 基础篇】Windows 开发常用 Dos 命令
docker启动链接sqlservr的镜像时报SSl错误
75-Java的List系列集合、集合的并发修改异常问题
L9ARM体系结构与接口技术--ARM指令集仿真环境搭建(day5)
【Docker】命令使用大全
在C#中进行单元测试
SpringBoot--maven-wrapper(mvnw)--使用/详解
Socket,Servlet,Tomcat
常见的几种填充方式:ZeroPad2d/ReflectionPad2d...(Pytorch)
- 原文地址:https://blog.csdn.net/qq_50985215/article/details/126842853