您的位置:首页 > 其它

Leetcode题解(十九)

2016-01-30 15:13 501 查看

54、Spiral Matrix

题目:

题目意思很简单,就是螺旋式访问矩阵元素。也没有比较经典的算法可以解决此题,只需要模拟一下这个过程即可。

代码如下:

class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty())
return res;
int m = matrix.size();
int n = matrix[0].size();

int i,j;

bool **arr = new bool*[m];
for(i=0;i<m;i++)
{
arr[i] = new bool
;
memset(arr[i],0,sizeof(bool));
}

int flag=0;//0表示向右,1表示向下,2表示向左,3表示向上

int count = 0;
i=0;
j=0;
while(true)
{
res.push_back(matrix[i][j]);
arr[i][j] = true;
count++;
if(count == m*n)
break;

if(0 == flag)
{
j++;
}
else if(1 == flag)
i++;
else if(2 == flag)
j--;
else
i--;

if(i<0 || i>=m || j<0 || j>=n || arr[i][j])//越界了或者访问到已经被访问过的元素
{

if(i<0)
i=0;
if(j<0)
j=0;
if(i>=m)
i=m-1;
if(j>=n)
j=n-1;
if(arr[i][j])
{
if(0 == flag)
j--;

else if(1 == flag)
i--;
else if(2 == flag)
j++;
else
i++;
}

flag = (flag + 1)%4;
res.pop_back();
count--;
}

}
return res;

}
};

 -----------------------------------------------------------------------分割线-----------------------------------------------------------------------

55、Jump Game

题目:

分析:针对数组中每一个元素,计算其最大能跳多远,并将这个最远值记录好。

代码如下:

class Solution {
public:
bool canJump(vector<int>& nums) {
const int size = nums.size();
int index = 0;
int max = 0;
for(;index<=size-1-1;index++)//注意等号,
{
if(index + nums[index] > max)
max = index + nums[index];
if(index >= max)//针对用例[0,1,2]
return false;
}
if(max >= size-1)
return true;
else
return false;
}
};

 -------------------------------------------------------------------------------分割线-------------------------------------------------------------------

58、Length of Last Word

题目

题目很简单,直接贴代码

class Solution {
public:
int lengthOfLastWord(const char *s) {
int len=strlen(s);
int sum=0;
while(s[len-1]==' ') len--;
for(int i=len-1;i>=0;i--)
{
if(s[i]!=' ')   sum++;
else break;
}
return sum;
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: