(1) Palindrome Number
[1],注意溢出情况:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
if(x==0)
return true;
int base=1;
while(x/base>=10) //如果是while(x/base)可能会溢出
base*=10;
while(x)
{
int left=x/base;
int right=x%10;
if(left!=right)
return false;
x-=left*base;
x/=10;
base/=100;
}
return true;
}
};
(2) Remove Nth Node From End of List
用双指针[2]:
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
if(!head)
return NULL;
ListNode *fast=head,*slow=head,*preslow;
for(int i=0;i<n;i++)
fast=fast->next;
while(fast)
{
preslow=slow;
slow=slow->next;
fast=fast->next;
}
if(slow==head)
return head->next;
preslow->next=preslow->next->next;
return head;
}
};
(3) Sum Root to Leaf Numbers
递归,一种更简洁的解法[3]:
class Solution {
private:
void solve(TreeNode *root, int cursum, int &sum){
if(!root)
return;
cursum=cursum*10+root->val;
if(!root->left && !root->right)
{
sum+=cursum;
return;
}
solve(root->left,cursum,sum);
solve(root->right,cursum,sum);
}
public:
int sumNumbers(TreeNode *root) {
int ret=0;
solve(root,0,ret);
return ret;
}
};
参考:
[1]http://www.cnblogs.com/remlostime/archive/2012/11/13/2767676.html
[2]http://www.cnblogs.com/remlostime/archive/2012/11/14/2770033.html
[3]http://blog.csdn.net/xudli/article/details/8600926