我模仿之前在某xv6源代码里看到的极其NB的递归算法,只是看来不得精髓啊。
class Solution {
public:
int reverse(int x) {
if (x == 0)
return 0;
int a = x;
int i = 0;
while (a) {
a /= 10;
++i;
}
return helper(x, i);
}
int helper(int left, int digit) {
if (digit == 1)
return left;
int t = 1;
for (int i = 0; i < digit - 1; ++i)
t *= 10;
return helper(left % t, digit - 1) * 10 + left / t;
}
};
另有高人更简单算法,每次都取最低位,之前的结果左移一位后加上这个最低位。
http://blog.csdn.net/ithomer/article/details/8800297
class Solution {
public:
int reverse(int x) {
int res = 0;
while (x != 0) { // don't care positive or negetive
res = res * 10 + x % 10; // get lowest digit then multi 10
x /= 10;
}
return res;
}
};
http://oj.leetcode.com/problems/reverse-integer/