Binary Tree Zigzag Level Order Traversal & Partition List & Letter Combinations of a Phone Number

来源:互联网 发布:ip电话网络拓扑 编辑:程序博客网 时间:2024/05/21 03:26

(1) Binary Tree Zigzag Level Order Traversal 

逐层存入一个队列,循环逆序顺序排列:

class Solution {public:    vector<vector<int> > zigzagLevelOrder(TreeNode *root) {        vector<vector<int>> ret;        int flag=0;        queue<TreeNode *> que;                if(!root)            return ret;                que.push(root);                while(!que.empty())        {            vector<int> tmp;                        int n=que.size();            for(int i=0;i<n;i++)            {                TreeNode *cur=que.front();                tmp.push_back(cur->val);                if(cur->left)                    que.push(cur->left);                if(cur->right)                    que.push(cur->right);                que.pop();            }                            if(flag==1)            {                reverse(tmp.begin(),tmp.end());                flag=0;            }            else            {                flag=1;            }            ret.push_back(tmp);        }        return ret;    }};

(2) Partition List

很简单,分解成两个list,一个存比x小的,一个存比x大的:

class Solution {public:    ListNode *partition(ListNode *head, int x) {        ListNode *lesshead=new ListNode(0);        ListNode *greaterhead=new ListNode(1);        ListNode *less=lesshead;        ListNode *greater=greaterhead;        ListNode *cur=head;                if(!head)            return NULL;                while(cur)        {            if(cur->val<x)            {                less->next=cur;                cur=cur->next;                less=less->next;                less->next=NULL;            }            else            {                greater->next=cur;                cur=cur->next;                greater=greater->next;                greater->next=NULL;            }        }                less->next=greaterhead->next;        return lesshead->next;    }};


(3) Letter Combinations of a Phone Number

枚举就果断用dfs!!!

class Solution {private:map<char,vector<char>> dict;    void filldict() {        dict.clear();        dict['2'].push_back('a');        dict['2'].push_back('b');        dict['2'].push_back('c');        dict['3'].push_back('d');        dict['3'].push_back('e');        dict['3'].push_back('f');        dict['4'].push_back('g');        dict['4'].push_back('h');        dict['4'].push_back('i');        dict['5'].push_back('j');        dict['5'].push_back('k');        dict['5'].push_back('l');        dict['6'].push_back('m');        dict['6'].push_back('n');        dict['6'].push_back('o');        dict['7'].push_back('p');        dict['7'].push_back('q');        dict['7'].push_back('r');        dict['7'].push_back('s');        dict['8'].push_back('t');        dict['8'].push_back('u');        dict['8'].push_back('v');        dict['9'].push_back('w');        dict['9'].push_back('x');        dict['9'].push_back('y');        dict['9'].push_back('z');}        void dfs(vector<string> &ret, int dep, int maxDep,string stmp,string digits){        if(dep==maxDep)        {            ret.push_back(stmp);            return;        }                char cur=digits[dep];                for(int i=0;i<dict[cur].size();i++)            dfs(ret,dep+1,maxDep,stmp+dict[cur][i],digits);    }    public:    vector<string> letterCombinations(string digits) {        vector<string> ret;        filldict();        dfs(ret,0,digits.size(),"",digits);        return ret;    }};



0 0