Palindrome Number & Remove Nth Node From End of List & Sum Root to Leaf Numbers

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值