论坛首页 Java企业应用论坛

一道面试排序题

浏览 35533 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-04-02  
  
    //考虑负数的情况下:
    public static void main(String[] args) {   
    	System.out.println(reverse(123489));
    	System.out.println(reverse(-1023450));
    }   

    static String reverse(int i) {
    	if(i<0) {
    		return reverse(-1 * i) + "-";//负号放后面吧。。
    	}
    	if(i<10) {
    		return String.valueOf(i);
    	}
    	return String.valueOf(i % 10) + reverse(i/10);
    }
    
0 请登录后投票
   发表时间:2011-04-02   最后修改:2011-04-02
public class Test {
    private  StringBuffer stringBuffer = new StringBuffer();
    public static void main(String[] args) {
       Test t = new Test();
       t.reverse(12345);
       System.out.println("reserver: " + Integer.parseInt(t.getStringBuffer().toString()));
    }
    public  int reverse(int num) {
        if (num / 10 == 0) {
            getStringBuffer().append(""+num);
            return 0;
        } else {
            int num2 = num % 10;
           getStringBuffer().append(""+num2);
            return reverse((num - num2) / 10);
        }
    }
    public StringBuffer getStringBuffer() {
        return stringBuffer;
    }
    public void setStringBuffer(StringBuffer stringBuffer) {
        this.stringBuffer = stringBuffer;
    }


}
0 请登录后投票
   发表时间:2011-04-02  
简单利用StringBuffer的反转方法即可
int i=12314141;
StringBuffer sb=new StringBuffer();
sb.append(i);
sb.reverse();
System.out.println(sb.toString());
0 请登录后投票
   发表时间:2011-04-02  
	
	public static int reverse(int num){
		return num < 10 ? num:
				Integer.parseInt(
						String.valueOf(num%10) + reverse(num/10)
				);
	}

4行.  不过看到某位朋友的才发现我没有考虑负数,不过用abs函数判断加个负号
0 请登录后投票
   发表时间:2011-04-02  
public int Sort(int param){
if(param<10)
return param;
String ch = ""+param%10;
ch += Sort(param/10);
return Integer.parseInt(ch);
}
这是我首先想到的算法。
但是又一个BUG, 如果数字中出现0的话,0会丢失。。。 因为从String转换为0的时候,丢失了。 我再想想把这个BUG Kill了
0 请登录后投票
   发表时间:2011-04-10   最后修改:2011-04-10
	public static int reverse(int num)
	{
		int i=10;
		for(;num%i!=num;i*=10);
		if(i==10) return num;
		int tmp=num%(i/10);
		num=num/(i/10)+reverse(tmp)*10;
		return num;
	}

有个bug就是不能出现0,
修改后
	public static int reverse(int num)
	{
		int i=1;
		for(;num%(10*i)!=num;i*=10);
		if(i==1) return num;
		int tmp=num%i;
		if(tmp<(i/10)) return num/i+reverse(tmp+(i/10))*10-10;
		return num/i+reverse(tmp)*10;
	}
0 请登录后投票
   发表时间:2011-04-10  
public static int method(int n){
String str=String.valueOf(n);
if(str.length()>1){
String temp=str;
str=String.valueOf(str.charAt(str.length()-1));
str+=method(Integer.parseInt(temp.substring(0,temp.length()-1)));
}
return Integer.parseInt(str);
}
0 请登录后投票
   发表时间:2011-04-11  
private static int reverse(int number) {
        int d = number % 10;
        int n = number / 10;
        if (n < 10)
            return new Integer(d + "" + n);
        else
            return new Integer(d + "" + reverse(n));
    }
0 请登录后投票
   发表时间:2011-04-12  
public int reverse(int num){
	if(num <= 0)
		return 0;
		
	int lastDigit = num % 10;
		
	int power = 1, _num = num;
	while(_num >= 10){
		_num = _num / 10;
		power = power * 10;
	}
		
	return ((lastDigit) * power) + reverse(num / 10);
}

 

如果不考虑题目中的递归要求的话,我首先想到的是将int转换为StringBuffer, 使用StringBuffer自带的reverse方法实现,当然细节中对于0什么的还是需要判断。

如果按照题目要求使用递归的话,我的代码如上,没有使用String,不过没考虑到负数的情况。

0 请登录后投票
   发表时间:2011-04-12   最后修改:2011-04-12
public static String inverse(int n) {
    return n == 0 ? "" : (n % 10) + inverse(n / 10);
}
  • 大小: 9.5 KB
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics