最近笔者去面试,面试到最后,面试官突然来一句,接下来说一下算法吧,这一句一出,我已经有点“凉凉”的感觉了,毕竟我没专门去学过算法,更别谈什么准备了,尴尬!
面试官:你听说过“回文数”吗?
我:回魂数?灵魂的“魂”吗?(心想:好恐怖,还有这种数???)
面试官:算了,比如给你一个数:123456,如何把它转化为654321?
嘿嘿,估计他那会心里有点无语吧,但这题我之前在一家公司笔试的时候遇到过,我还记得笔试题上还明确要求不能将数字转化为String类型呢,我简单说了一下思路,大概也就那样吧,居然两次面试都遇到这题,回来我就自己动手尝试一下,记录如下:
public static void main(String[] args){
getHuiWenShu(123456);
getHuiWenShu(502000);
getHuiWenShu(0);
getHuiWenShu(8);
}
//第一种,最简单,直接用StringBuilder的reverse方法
private int getHuiWenShu(int a){
String string=String.valueOf(a);
StringBuilder stringBuilder=new StringBuilder(string).reverse();
Integer integer = Integer.valueOf(stringBuilder.toString());
LogUtil.loge("原来:"+a+",转换后:"+integer);
return integer;
}
//第二种,使用String倒序拼接的方法
private int getHuiWenShu(int a){
String string=String.valueOf(a);
String result="";
for(int i=string.length()-1;i>=0;i--){
if(string.charAt(i)!='0' || !"".equals(result)){
result+=string.charAt(i);
}
}
Integer integer=0;
if(!"".equals(result))
integer = Integer.valueOf(result);
LogUtil.loge("原来:"+a+",转换后:"+integer);
return integer;
}
//第三种,不转String,直接用运算
private int getHuiWenShu(int a){
int result=0;
while (a!=0){
int b=a%10;
result=result*10+b;
a=a/10;
}
LogUtil.loge("转换后:"+result);
return result;
}
其实嘛,如果你不是面试算法工程师岗位,一般来说面试中的算法也不是很难的,但前提是你之前要有所准备,比如像今天说到的“回文数”啊,排序算法啊,还有洗牌算法啊等等,这些你稍稍看一下,也不用花很多时间,但关键时候有可能会给你的面试加分的。