锁定老帖子 主题:一道面试排序题
精华帖 (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); } |
|
返回顶楼 | |
发表时间: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; } } |
|
返回顶楼 | |
发表时间:2011-04-02
简单利用StringBuffer的反转方法即可
int i=12314141; StringBuffer sb=new StringBuffer(); sb.append(i); sb.reverse(); System.out.println(sb.toString()); |
|
返回顶楼 | |
发表时间:2011-04-02
public static int reverse(int num){ return num < 10 ? num: Integer.parseInt( String.valueOf(num%10) + reverse(num/10) ); } 4行. 不过看到某位朋友的才发现我没有考虑负数,不过用abs函数判断加个负号 |
|
返回顶楼 | |
发表时间: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了 |
|
返回顶楼 | |
发表时间: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; } |
|
返回顶楼 | |
发表时间: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); } |
|
返回顶楼 | |
发表时间: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)); } |
|
返回顶楼 | |
发表时间: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,不过没考虑到负数的情况。 |
|
返回顶楼 | |
发表时间:2011-04-12
最后修改:2011-04-12
public static String inverse(int n) { return n == 0 ? "" : (n % 10) + inverse(n / 10); } |
|
返回顶楼 | |