1.leetcode344
str2 = new StringBuffer(str2).reverse().toString();
StringBuilder rev = new StringBuilder();rev.toString();
String orig;char[] s = orig.toCharArray();
char[] s;String st=new String(s);st=s.toString();
2.136
对于任何数x,都有x^x=0,x^0=x
Java:return 必须在合适的位置,不能再循环里面;break也只能用一次。
3 .
list可以有重复,set不可以有重复的,如果发现有重复的,则不会添加。hashset可以取代arraylist。
map:hashmap就是键值和值(key和value),多个键可以对应一个value,但是一个key不能多对应多个value。
arraylist也可以sort,但是需要继承comparable接口,也可以继承comparator类。
4.104
这道题也可以用,递归的方法做,但是比较难理解,用层序遍历(即图的广度优先遍历)比较好理解。
LinkedList在这这里是作为队列,add()==addLast(),poll()==poll(),push()==addFirst()
LinkedList可以作为队列或是栈使用,但是ArrayList只是作为一个可以动态变化大小的数组。
class Solution {
public int maxDepth(TreeNode root) {
LinkedList ar=new LinkedList();
ar.push(root);
int level=0;
int nextnum=0;
int curnum=1;
while(!ar.isEmpty())
{
TreeNode current=ar.pop();//放在循环以外就不行了,注意代码的局部性吧
curnum--;
if(current.left!=null)
{
ar.push(current.left);
nextnum++;
}
if(current.right!=null)
{
ar.push(current.right);
nextnum++;
}
if(curnum==0)
{
level++;
curnum=nextnum;
nextnum=0;
}
}
return level;
}
}
还有一种方法,递归的方法。
class Solution {
public int maxDepth(TreeNode root) {
if(root==null)
return 0;
int left=maxDepth(root.left);
int right=maxDepth(root.right);
return left>right?(left+1):(right+1);
}
}
5.283 move zeros
int len = nums.length;
int idx = 0;
for(int i = 0; i < len; i ++)
{
if(nums[i]!=0) {
nums[idx ++] = nums[i];
}
}
for(int i = idx; i < len; i ++)
nums[i] = 0;
6.反转链表 206
错误例子(不知道哪里错了),p 是多余的,而且不能保证c不为null,
public ListNode reverseList(ListNode head) {
ListNode p=head;
ListNode c=head.next;
ListNode n=c.next;
head.next=null;
while(c!=null)
{
c.next=p;
p=c;
c=n;
if(n!=null)
{
n=n.next;
}
head=p;
}
return head;
}
正确例子
ss Solution {
public ListNode reverseList(ListNode head) {
if(head==null)
return head;
ListNode pre=head.next;
ListNode cur=null;
while(head!=null)
{
head.next=cur;
cur=head;
head=pre;
if(head!=null)
pre=head.next;
}
return cur;
}
7.171
int l=s.length();
int r=0;
for(int i=0;i
8. 169 arrays这个类之后可以再学一些用法
Arrays.sort(num);
return num[num.length/2];
9.题13,注意HashMap的用法。主要就put和get,还有size(),containsKey(),containsValue().
public int romanToInt(String s) {
HashMap h=new HashMap();
h.put('I',1);
h.put('V',5);
h.put('X',10);
h.put('L',50);
h.put('C',100);
h.put('D',500);
h.put('M',1000);
int result=0;
for(int i=0;i=h.get(s.charAt(i+1)))
{
result=result+h.get(s.charAt(i));
}
else
{
result=result+h.get(s.charAt(i+1))-h.get(s.charAt(i));
i++;
}
}
return result;
}
10.longest palindromic substring (5)
主要就是抓住,回文字符串,重要的是最中间那个字符,我们可以利用它来进行遍历
注意substring的用法,right是子字符串后面那一位。
class Solution {
public String longestPalindrome(String s) {
int left=0;
int right=0;
int j;
int k;
for(int i=0;i=0&&k
11. 8. String to Integer (atoi)
class Solution {
public int myAtoi(String str) {
str = str.trim(); // kill add white spaces
if (str == null || str.length() < 1) {
return 0;
}
int i = 0; // index of str
char flag = '+'; // default positive
if (str.charAt(0) == '-') {
flag = '-';
i++;
} else if (str.charAt(0) == '+') {
i++;
}
double res = 0;
// abandon the non-digit char; calculate the result
while (str.length() > i && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
res = res * 10 + str.charAt(i) - '0';
i++;
}
if (flag == '-') res = -1 * res;
if (res > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
} else if (res < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
return (int) res;
}
}
10. Regular Expression Matching 这题主要是根据p的情况来考虑
- 若p为空,若s也为空,返回true,反之返回false
- 若p的长度为1,若s长度也为1,且相同或是p为'.'则返回true,反之返回false
- 若p的第二个字符不为*,若此时s为空返回false,否则判断首字符是否匹配,且从各自的第二个字符开始调用递归函数匹配
- 若p的第二个字符为*,若s不为空且字符匹配,调用递归函数匹配s和去掉前两个字符的p,若匹配返回true,否则s去掉首字母
- 返回调用递归函数匹配s和去掉前两个字符的p的结果
class Solution {
public boolean isMatch(String s, String p) {
if(p.length()==0)
return s.isEmpty();
if(p.length()==1)
return s.length()==1&&(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.');
if(p.charAt(1)!='*'){
if(s.length()==0) return false;
return ((s.charAt(0)==p.charAt(0))||p.charAt(0)=='.')&&isMatch(s.substring(1),p.substring(1));
}
else{
while((s.length()>0)&&(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.')){
if(isMatch(s,p.substring(2))) return true;
s=s.substring(1);
}
}
return isMatch(s,p.substring(2));
}
}
当时在 while((s.length()>0)&&(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.'))难了一会,因为没有加(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.')的括号,导致问题。
9. Palindrome Number
class Solution {
public boolean isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0))
return false;
int num=0;
while(x>num){
num=num*10+x%10;
x=x/10;
}
return x==num||num/10==x;
}
}
4. Median of Two Sorted Arrays
int x=nums1.length+nums2.length;
ArrayList a=new ArrayList();//必须要用一个可变数组,不能光用i和j,并且最后用.size返回它的大小
boolean isOdd;//用一个boolean判断两个数组的大小的和是否为基数
if(x%2==0)
isOdd=false;
else
isOdd=true;
double result=0.0;
int i=0,j=0;
while(i