LeetCode 2015.8.8-2015.8.14 240,222,3,54,61,242,179,43,227
240 Search a 2D Matrix II 2015.8.8
class Solution {
public:
bool searchMatrix(vector< vector<int> >& matrix, int target) {
if (matrix.size()==0) return false;
int i,j,rows=matrix.size(),cols=matrix[0].size();
i = 0;
j = cols -1;
while (i<rows && j>=0)
{
if (matrix[i][j]==target) return true;
else if (matrix[i][j]>target) j--;
else i++;
}
return false;
}
};
222 Count Complete Tree Nodes 2015.8.8
class Solution {
public:
int countNodes(TreeNode* root) {
if (root==NULL) return 0;
int l=getLeftCount(root)+1,r=getRightCount(root)+1;
if (l==r) return (2<<(l-1))-1;
else
return countNodes(root->left)+countNodes(root->right)+1;
}
int getLeftCount(TreeNode* root)
{
int cnt = 0;
while (root->left!=NULL)
{
cnt++;
root=root->left;
}
return cnt;
}
int getRightCount(TreeNode* root)
{
int cnt = 0;
while (root->right!=NULL)
{
cnt++;
root=root->right;
}
return cnt;
}
};
3 Longest Substring Without Repeating Characters 2015.8.8
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int ans = -1;
int n=s.size();
if (n==0) return 0;
int i=0,j=-1;
int ch[300]={0};
while (j+1<n)
{
j++;
while (ch[s[j]]==1)
{
ch[s[i]]=0;
i++;
}
ch[s[j]]=1;
if (j-i+1>ans) ans=j-i+1;
}
return ans;
}
};
54 Spiral Matrix 2015.8.10
class Solution {
public:
vector<int> spiralOrder(vector< vector<int> >& matrix) {
int m = matrix.size();
vector<int> ans;
if (m==0) return ans;
int n = matrix[0].size(),dir=4;
int total = m*n;
bool flag[m+5][n+5];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
m++;n++;
for(int i=0;i<=m;i++)
for(int j=0;j<=n;j++)
flag[i][j]=true;
for(int j=0;j<=n;j++)
{
flag[0][j]=false;
flag[m][j]=false;
}
for(int i=0;i<=m;i++)
{
flag[i][0]=false;
flag[i][n]=false;
}
int x = 1, y = 0;
while (ans.size()!=total)
{
for(int i=0;i<dir;i++)
{
while (flag[x+dx[i]][y+dy[i]])
{
x=x+dx[i];
y=y+dy[i];
flag[x][y]=false;
ans.push_back(matrix[x-1][y-1]);
}
}
}
return ans;
}
};
61 Rotate List 2015.8.11
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if (head==NULL || k==0) return head;
ListNode* h=new ListNode(0);
h->next=head;
ListNode* p=h;
int n=0;
while (p->next!=NULL)
{
n++;
p=p->next;
}
k=k%n;
if (k==0) return head;
int m=n-k;
p=h;
for(int i=1;i<=m;i++)
p=p->next;
ListNode* f=p->next;
p->next=NULL;
p=f;
for(int i=1;i<k;i++)
p=p->next;
p->next=head;
return f;
}
};
242 Valid Anagram Easy 2015.8.11
class Solution {
public:
bool isAnagram(string s, string t) {
char ch[300]={0};
int lens=s.size(),lent=t.size();
for(int i=0;i<lens;i++)
ch[s[i]]++;
for(int i=0;i<lent;i++)
ch[t[i]]--;
for(int i='a';i<='z';i++)
if (ch[i]!=0) return false;
return true;
}
};
179 Largest Number 2015.8.13
class Solution {
public:
string largestNumber(vector<int>& nums) {
int len = nums.size();
vector<string> strs;
// Change to string
for(int i=0;i<len;i++)
{
char buff[20];
sprintf(buff,"%d",nums[i]);
strs.push_back(buff);
}
sort(strs.begin(),strs.end(),cmp);
string ret;
for(int i=0;i<len;i++)
ret+= strs[i];
if(ret=="" || ret[0]=='0') ret="0";
return ret;
}
static bool cmp(string a,string b)
{
return a+b>b+a;
}
};
43 Multiply Strings 2015.8.13
class Solution {
public:
string multiply(string num1, string num2) {
int len1=num1.size(),len2=num2.size();
if (len1==1 && num1[0]=='0') return "0";
if (len2==1 && num2[0]=='0') return "0";
int a[len1],b[len2];
vector<int> ans;
ans.resize(len1+len2);
len1--;len2--;
for(int i=0;i<=len1;i++)
a[i]=num1[len1-i]-'0';
for(int i=0;i<=len2;i++)
b[i]=num2[len2-i]-'0';
for(int i=0;i<=len1;i++)
for(int j=0;j<=len2;j++)
ans[i+j]+=a[i]*b[j];
int len = len1+len2;
for(int i=0;i<=len;i++)
{
ans[i+1]+= ans[i]/10;
ans[i]%= 10;
}
len++;
while (ans[len]>10)
{
ans.push_back(ans[len]/10);
ans[len]%=10;
len++;
}
while (ans[len]==0)
{
len--;
ans.pop_back();
}
string s;
for(int i=len;i>=0;i--)
s.push_back(ans[i]+'0');
return s;
}
};
227 Basic Calculator II 2015.8.14
1. 自己的,速度非常慢,被我人为搞复杂了。
class Solution {
public:
int calculate(string s) {
vector<int> op;
vector<int> num;
stack<int> sop;
stack<int> snum;
int flag[5]={0,0,0,1,1};
int k=0, ch[300]={0} , len = s.size();
ch['+']=1;ch['-']=2;
ch['*']=3;ch['/']=4;
for(int i=0;i<len;i++)
{
if (s[i]==' ') continue;
if (s[i]>='0' && s[i]<='9')
{
k = s[i]-'0' + k*10;
}
else
{
num.push_back(k);
k=0;
op.push_back(ch[s[i]]);
}
}
num.push_back(k);
snum.push(num[0]);
int k1,k2,ans;
for(int i=0;i<op.size();i++)
{
if (sop.empty())
{
snum.push(num[i+1]);
sop.push(op[i]);
}
else
{
if (flag[op[i]] <= flag[sop.top()])
{
k1 = snum.top();snum.pop();
k2 = snum.top();snum.pop();
ans = cal(k2,k1,sop.top());
sop.pop();
snum.push(ans);
sop.push(op[i]);
snum.push(num[i+1]);
cout<<ans<<endl;
}
else
{
ans =cal(snum.top(),num[i+1],op[i]);
snum.pop();snum.push(ans);
cout<<ans<<endl;
}
}
}
while (!sop.empty())
{
k1 = snum.top();snum.pop();
k2 = snum.top();snum.pop();
ans = cal(k2,k1,sop.top());
sop.pop();
snum.push(ans);
}
return snum.top();
}
int cal(int k1,int k2,int op)
{
switch (op)
{
case 1: return k1+k2;break;
case 2: return k1-k2;break;
case 3: return k1*k2;break;
case 4: return round(k1/k2);break;
}
}
};
2. 网上搜的
class Solution {
public:
int calculate(string s) {
istringstream in(s+"+");
long long total = 0, term, sign =1,n;
in>>term;
char op;
while (in >> op)
{
if (op=='+' || op=='-')
{
total +=sign * term;
sign = 44-op;
in>>term;
}
else
{
in >> n;
if (op=='*')
term *=n;
else term /=n;
}
}
return total;
}
};
LeetCode 2015.8.8-2015.8.14 240,222,3,54,61,242,179,43,227
最新推荐文章于 2024-07-31 10:15:52 发布