问题1

判定一个正整数是否是一个回文数。例如12121是回文数,而1231不是回文数。
判断一个整数是否是回文数

解法1:转换成字符串再判断

要判断一个整数是否是回文数,最自然的想法是把整数转换成一个字符串,然后根据回文的对称特性进行判断。Java中数字转换为字符串可以通过String.valueOf()函数实现,判断字符串是否为回文字符串代码如下:

static boolean isPalindrome(int num) {
    String str = String.valueOf(num);
    String reverse = new StringBuffer(str).
            reverse().toString();

    if (str.equals(reverse)) {
        return true;
    } else {
        return false;
    }
}

解法2:数字位判断法

先比较整数的第1位和最后1位是否相等,如果不等,则直接返回false;若相等,则接下去判断剩下的位置,如同回文字符串判断的过程一样。代码如下:

static boolean isPalindrome(int num) {
    if (num < 0)
        return false;
    int div = 1;
    while (num / div >= 10) {
        div *= 10;
    }
    while (num != 0) {
        int l = num / div;
        int r = num % 10;
        if (l != r)
            return false;
        num = (num % div) / 10;
        div /= 100;
    }
    return true;
}

如整数为121,则div初始会设为100,因此l=21/100=1是整数的第1位,而r=121%10=1是最后1位。这两位相等,则继续循环,设置x为第2为2,此时div除以100变成1,之所以div除以100是因为每次比较了两个位。

附:问题2

Given a string of sentence, reverse the sentence word by word. For instance, input
string is ”I am a programmer”, output should be ”programmer a am I”. You can
suppose the sentence only contains alphanumeric characters and space.
Example:
ReverseWords(”hello world”) = ”world hello”

// 反转整个字符串
public static String reverseString(String string) {
    char[] array = string.toCharArray();
    for (int i = 0; i < (array.length) / 2; i++) {
        char temp = array[i];
        array[i] = array[array.length - 1 - i];
        array[array.length - i - 1] = temp;
    }
    return String.valueOf(array);
}

// 以空格为分界符,反转每个单词
public static void reverseWord(String sentence) {
    if (sentence == null)
        return;
    System.out.println("原句子为:" + sentence);
    String sentenceReverse = reverseString(sentence);
    String[] splitStrings = sentenceReverse.split(" ");
    String resultBuffer = "";
    for (String s : splitStrings)
        resultBuffer = resultBuffer + reverseString(s) + " ";
    System.out.println("反转结果为:" + resultBuffer);
}