(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;
}
};
枚举就果断用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;
}
};