真的好无语啊!!!
今天在写 LeetCode 的 第 9 题时,就是那个回文数。
我的想法是利用栈的“先进后出”特性,
1.先转换为字符串
2.将字符串拆分,从第一个开始压入栈
3.再从栈中弹出,利用StringBuilder 拼接
4.最后比较 拼接之后和原来的是否相等,相等就是回文数,否则就不是。
上代码!
这是题目
我最开始的代码(注意:我第一次代码有问题)
public static boolean huiwen(String str){
//new 一个栈
Stack<Object> stack= new Stack<Object>();
// 这里使用StringBuilder 进行拼接
StringBuilder sb=new StringBuilder();
// 循环,压入栈
for (int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
stack.push(str.charAt(i));
}
int len= stack.size();
//循环取出,并拼接字符串
for(int i=0;i<len;i++){
Object pop= stack.pop();
sb.append(pop);
}
if(str.equals(sb)){
return true;
}
return false;
}
But But 有问题
运行有问题,测试“121”, 返回false; 这肯定不对啊
调试后,也没问题啊 ! 你看
看着 str = "121" , sb = "121"。 这能不对???
解决问题
问题出在这个 “ equals() ” 方法上
StringBuilder 中没有对 equals() 进行重写 。所以这里比较的是内存地址。这肯定不一样啊,所以一直返回false.
最终通过的代码
class Solution {
public boolean isPalindrome(int x) {
boolean flag = false;
String str = String.valueOf(x);
return hh(str);
}
public static boolean hh(String str){
Stack<Object> objects = new Stack<>();
// 这里直接 定义一个字符串
String a = "";
for (int i = 0; i < str.length(); i++) {
objects.push(str.charAt(i));
}
int len= objects.size();
for(int i=0;i<len;i++){
char pops= (char) objects.pop();
a = a + pops;
}
if(a.equals(str)){
return true;
}
return false;
}
}