LeetCode第七题整数反转:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:1.由于存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。如果反转后整数溢出那么就返回 0!
2.如果int类型溢出,其返回的值是int取值范围内的值。
3.010和10是不一样的,输出会自动消掉010中的一个变成数字10哟
第十三题:罗马转整数
我选的方法是先将存在罗马符号代表的数字一起算出来后,再通过for循环找出IV等字符进行有规律的减改。
代码如下:class Solution {
public int romanToInt(String s) {
int a=s.length();
int back=0;
while(a-1>=0) {
if(s.substring(a-1,a).equals("I")) {back++; a--;continue ;}
if(s.substring(a-1,a).equals("V")) {back+=5; a--;continue ;}
if(s.substring(a-1,a).equals("X")) {back+=10; a--;continue ;}
if(s.substring(a-1,a).equals("L")) {back+=50; a--;continue ;}
if(s.substring(a-1,a).equals("C")) {back+=100; a--;continue ;}
if(s.substring(a-1,a).equals("D")) {back+=500; a--;continue ;}
if(s.substring(a-1,a).equals("M")) {back+=1000; a--;continue ;}
System.out.println(a); }
for(int i=1;i<s.length();i++) {
if(s.substring(i-1,i+1).equals("IV"))back-=2;
if(s.substring(i-1,i+1).equals("IX"))back-=2;
if(s.substring(i-1,i+1).equals("XL"))back-=20;
if(s.substring(i-1,i+1).equals("XC"))back-=20;
if(s.substring(i-1,i+1).equals("CD"))back-=200;
if(s.substring(i-1,i+1).equals("CM"))back-=200; }
return back;
这道题虽然是属于简单难度的题目,但是可以给我一个更好的锻炼机会,让我学会了通过寻找规律,再去写算法。
第十四题(必做!!!!)
str.length和str[].length()的区别是第一个是有多少个字符串,第二个是第几个字符串的长度。
java程序运行是出现错误提示示:java.lang.ArrayIndexOutOfBoundsException: 0是什么原因?
java.lang.ArrayIndexOutOfBoundsException: 0
数组下标连0都越界了,唯一的原因是数组的维数为0
有两类数组初始化语句会导致这种情况发生
int[] a=new int[0];
int[] a={};
如果你的程序以前正常,现在变得不正常了,就只有一种情况了,那就是使用了int变量初始化数组,如
int[] a=new int[i];
这个i是一个变量,当i>0程序正常;当i等于零时并试图去访问a[0]就会出现你看到的异常
简单解法:
利用字符串排序时的字典序规则。
排序后,最小字符串和最大字符串的公共前缀即是所有字符串的公共前缀。
具体如下:
让公共前缀初始化为第一个字符串。
然后不断的向后迭代,不断地缩减公共前缀 prefix 的长度。
垂直扫描上述思路略有不同,垂直扫描比较的是每个字符串相同位置的字符是否相同。
从第一个位置开始迭代,一旦发现有任何一个字符串在当前位置的字符与其他的不同,那么此位置就是最大前缀的边界点。
共有六种比较简单的解法:https://blog.csdn.net/LetJava/article/details/96477505
网友评论