每日至少一题,每一题的思考时间不要超过半个小时,解题过程不要超过一个小时,超过了就看答案!
Q7 : Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
Subscribe to see which companies asked this question.
解题方式1
public class Solution {
public static int reverse(int x) {
String xStr=x+"";
int length = xStr.length();
if(length==1){
return Integer.parseInt(xStr);
}
int tmp=0;
if(x<0){
tmp=-1;
xStr=xStr.substring(1,length);
length--;
}
char tail='a';
char head='a';
String t="";
String s="";
for(int i=0;i<length&&length-1-i>=i;i++){
tail=xStr.charAt(length-1-i);
head=xStr.charAt(i);
if(i==length-i-1){
s=s+tail;
}else{
s=s+tail;
t=head+t;
}
}
xStr=s+t;
long longval=Long.parseLong(xStr);
if(tmp<0){
longval=-longval;
}
if(longval>2147483647||longval<-2147483648){
return 0;
}
else{
return (int)longval;
}
}
}
解题思路 : 解题思路很简单就是将int数转化为一个String然后载把它从头到尾的截取为s、t两个字符串,然后载拼接起来就行,载这之中需要注意的是int数据的越界问题,和int数据分别为正和负的时候分情况讨论
Q6:
解题方式1
public class Solution {
public String convert(String s, int numRows) {
if(numRows==1){
return s;
}
int i1=numRows;
int i2=s.length();//这里需要注意长度一定安排够长,不然容易造成数组越界
char[] charS=s.toCharArray();
int sIndex=0;
char[][] tmp=new char[i1][i2];
int[] indexs=new int[i1];
boolean flag=false;//这是一个标志变量,用它来控制j的加和减
int j=0;
while(j>=0&&j<=numRows-1&&sIndex<charS.length){
if(!flag){//加的情况
tmp[j][indexs[j]++]=charS[sIndex++];
j++;
flag=false;
if(j==numRows){
flag=true;
j-=2;
continue;
}
}else if(flag){//减得情况
char tt=charS[sIndex++];
tmp[j][indexs[j]++]=tt;
j--;
flag=true;
if(j==-1){
flag=false;
j+=2;
continue;
}
}
}
String rtn="";
char[] c=null;
for(int i=0;i<numRows;i++){
c=tmp[i];
for(int k=0;k<c.length;k++){
if(c[k]!='\0'){
rtn+=c[k];
}
}
}
return rtn;
}
}
解题思路 : 将字符串拆分为字节数组,然后载新建一个二维的字节数据来模拟的目标拆分所需要的航和列,然后载拆分的过程中用一个flag变量决定目标字节填充的行数即二维数组的行数(flag决定加减)