论坛首页 Java企业应用论坛

一道面试排序题

浏览 35544 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (3)
作者 正文
   发表时间:2010-06-04   最后修改:2010-06-04
	public static String reverseInt(int x) {
		String string = "";
		if(x != 0) {
			string += x % 10 + reverseInt(x / 10);
		}
		
		return string;
	}


对于 x=0 不适用


这样就支持0了
/**
	 * 数据翻转
	 * @param source
	 * @return
	 */
	private static String recursive(int source){
		if(source<=10)
			return source%10+"";
		return source%10 + "" + recursive(source/10);
	}
	
	public static void main(String[] args) {
		System.out.println(Integer.parseInt(recursive(123190)));
	}
0 请登录后投票
   发表时间:2010-06-04  
	public static int reverseInt(int number) {
		if (number > 10) {
			int aInteger = number % 10;

			return (int) (aInteger * Math.pow(10, (number / 10 + "").length())) + reverseInt(number / 10);
		} else {
			return number;
		}
	}

0 请登录后投票
   发表时间:2010-06-04  
我只是记得取模计算实际上是比较耗时的一个操作。
可能转化为数组,然后再操作,效果比较好。
现在在win下,等会换到linux下,用ruby写两个测下哪个快点。
0 请登录后投票
   发表时间:2010-06-04  
goby1220 写道
	/**
	 * 递归翻转
	 * @param source
	 * @param index
	 */
	public static void recursiveTurnover(String source,int index){
		char[] a = source.toCharArray();
		if(index<=a.length/2){
			System.out.print(a[(a.length-1)-index]);
			a[(a.length-1)-index] = a[index];
			recursiveTurnover(new String(a), index+=1);
		}else{
			System.out.print(new String(a,(a.length/2+1),a.length-(a.length/2+1)));
		}
	}

顶这个。
0 请登录后投票
   发表时间:2010-06-04  
public class Reserve {


public static void main(String[] args) {
int i=1234567;
resv(i,0);
}

private static void resv(int data, int index) {
String strData=data+"";
if(index<strData.length()){
resv(data, index+1);
System.out.println(strData.charAt(index));
}
}
}
0 请登录后投票
   发表时间:2010-06-04  
public int getS(int a) {
if (a < 0)
return -getS(Math.abs(a));
else if (a < 10)
return a;
else
return Integer.parseInt((a + "").substring((a + "").length() - 1) + getS(Integer.parseInt((a + "").substring(0, (a + "").length() - 1))));
}
0 请登录后投票
   发表时间:2010-06-04  
小弟第一次回复哈,还是上班时间回复的,望各位大虾拍砖!!

直接上代码哈!

public  static String trun(int input){
String s=input+"";
System.out.println(s);
char[] b=s.toCharArray();
StringBuffer result=new StringBuffer();
for(int i=b.length-1;i>=0;i--)
result.append(b[i]);
return result.toString();
}
0 请登录后投票
   发表时间:2010-06-04   最后修改:2010-06-04
1d7500 写道
	public static int reverseInt(int number) {
		if (number > 10) {
			int aInteger = number % 10;

			return (int) (aInteger * Math.pow(10, (number / 10 + "").length())) + reverseInt(number / 10);
		} else {
			return number;
		}
	}



我觉得这是唯一思路正确的,不过我修正了一下,还可以在8行内完成
可能很多人忽略了,输入输出都是int类型的,而且只能有一个参数吧?

public static int reverse(int param){
	if(param<10)return param;
	int p=param%10, q=param/10;
	if(p>0){
		while((param=param/10)>0)p*=10;
	}
	return p+reverse(q);
}
0 请登录后投票
   发表时间:2010-06-04  
public class Test {
public static String reverse(int i) {

return new StringBuffer(new String().valueOf(i)).reverse().toString();
}

public static void main(String[] args) {

System.out.println(Test.reverse(-2345));
}
}
0 请登录后投票
   发表时间:2010-06-04  
来一个不用递归,不用string,不用pow函数的,但没有考虑负数
  public static void main(String[] args) {
    System.out.println(reverse(123456));
    System.out.println(reverse(1234567));
    System.out.println(reverse(558833221));
    System.out.println(reverse(0));
    System.out.printf("%X%n", reverse(0xFF, 16));
    System.out.printf("%X%n", reverse(0xDEF, 16));
  }

  public static int reverse(int n) {
    return reverse(n, 10);
  }

  public static int reverse(int n, int radix) {
    int result = 0;
    for (int x = 1; n >= x; x *= radix) {
      result *= radix;
      result += ((n % (x * radix)) / x);
    }
    return result;
  }
0 请登录后投票
论坛首页 Java企业应用版

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