Symmetric Number 求取对称数字

        最近实验室师兄找工作,今天帮师兄做了一道亚马逊中国的在线笔试题。说的是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值