最近实验室师兄找工作,今天帮师兄做了一道亚马逊中国的在线笔试题。说的是Symmetric Number(对称数字),即给定一个数字,获取大于它且最接近它的对称数字。
例如,123对应131,12321对应12421。正常要求是C语言实现,可惜本人习惯于JAVA,所以用JAVA写了一段代码,测试通过。代码如下:
public class SymmNum {
public static void main(String[] args){
System.out.println("对称数字:"+getSymNum("561068369"));
}
/**
* 获取大于给定数的最接近对称数
* @param n
* @return
*/
public static int getSymNum(String n){
System.out.println("给定数字:"+n);
ArrayList<Integer> m = getInt(n);
String result = "";
if(m.size()%2==1){ //奇数位给定数字
String s1 = "";
String s2 = "";
for(int i=(m.size()-1)/2-1;i>=0;i--){
s1 = s1 + m.get(i);
}
System.out.println(s1);
for(int i=(m.size()-1)/2+1;i<m.size();i++){
s2 = s2 + m.get(i);
}
System.out.println(s2);
if(Integer.parseInt(s1)>Integer.parseInt(s2)){ //前半部分数字倒序值大于后半部分数字值
result = getBackward(s1)+m.get((m.size()-1)/2)+s1;
}else{
if(m.get((m.size()-1)/2)!=9){ //中间位数字不等于9
String s11 = "";
ArrayList<Integer> i1 = getInt(getBackward(s1));
for(int i=0;i<i1.size();i++)
s11 = s11 + i1.get(i);
result = s11+((m.get((m.size()-1)/2))+1)+getBackward(s11);
}else{ //中间位数字等于9
String s11 = "";
ArrayList<Integer> i1 = getInt(getBackward(s1));
for(int i=0;i<i1.size()-1;i++)
s11 = s11 + i1.get(i);
s11 = s11 + (i1.get(i1.size()-1)+1);
result = s11+0+getBackward(s11);
}
}
}else{ //偶数位给定数字
String s1 = "";
String s2 = "";
for(int i=m.size()/2-1;i>=0;i--){
s1 = s1 + m.get(i); //逆序
}
System.out.println(s1);
for(int i=m.size()/2;i<m.size();i++){
s2 = s2 + m.get(i); //顺序
}
System.out.println(s2);
if(Integer.parseInt(s1)>Integer.parseInt(s2)){ //前半部分数字倒序值大于后半部分数字值
result = getBackward(s1)+s1;
}else{ //前半部分数字倒序值小于后半部分数字值
String s11 = "";
ArrayList<Integer> i1 = getInt(getBackward(s1));
for(int i=0;i<i1.size()-1;i++)
s11 = s11 + i1.get(i);
s11 = s11 + (i1.get(i1.size()-1)+1);
result = s11+getBackward(s11);
}
}
return Integer.parseInt(result);
}
/**
* 获取整数每一位数字 列表返回
* @param sValue
* @return
*/
public static ArrayList<Integer> getInt(String sValue){
ArrayList<Integer> m = new ArrayList<Integer>();
int size = sValue.length();
for (int i = 0; i < size; i++)
m.add(sValue.codePointAt(i) - '0');
return m;
}
/**
* 字符型整数逆序返回
* @param s1
* @return
*/
public static String getBackward(String s1){
String s2 = "";
ArrayList<Integer> s = getInt(s1);
for(int i=s.size()-1;i>=0;i--){
s2 = s2 + s.get(i);
}
return s2;
}
}
代码包地址 http://download.csdn.net/detail/u011342532/8018113