问题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);
}