您的位置:首页 > 其它

Leetcode题解(23)

2016-02-01 12:44 357 查看

69. Sqrt(x)

题目

分析,题目实现求一个int数的平方根,最暴力的算法就是逐个遍历,从1开始到x,判断是否有一个数i,其中满足i*i<=x,并且(i+1)*(i+1)>x;这个算法发虽然简单,但是效率不高。其实,按照暴力算法的思想,我们可以联想到在一个已经排好序的数组中查找一个数,该数正好满足上面的条件,因此可以采用二分查找的思想。代码如下:

class Solution {
public:
int mySqrt(int x) {
int a[10]={0,1,1,1,2,2,2,2,2,3};
if(x<=9)
return a[x];

unsigned long long left=1,right=x;

unsigned long long middle= (left + right)>>1;
while(left<=right)
{
middle = (left + right)>>1;
if(middle * middle <x)
{
left = middle+1;

}
else if(middle * middle > x)
{
right = middle - 1;

}
else
return middle;
}
if(middle * middle > x)
middle--;
//if(middle * middle < x)
//    middle++;
return middle;
}
};

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

70. Climbing Stairs

题目

分析:费波拉契数列

代码如下:

class Solution {
public:
int climbStairs(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function

if(n <= 2)
{
return n;
}
else
{
int* step = new int
;

step[0] = 1;
step[1] = 2;

for(int i = 2; i < n; i++)
{
step[i] = step[i-1] + step[i-2];
}
return step[n-1];
}
}
};

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

71. Simplify Path

提示:简单的字符串操作,其基本思想是将path按照'\'进行截取,并将截取后的字符串压栈。

代码如下:

class Solution {
public:
string simplifyPath(string path) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
stack<string> s;
string str;
for(int i = 0; i < path.size(); i++)
{
if (path[i] == '/')
{
if (str == "..")
{
if (!s.empty())
s.pop();
}
else if (str != "." && str != "")
{
s.push(str);
}

str = "";
}
else
{
str += path[i];
}
}

if (str == "..")
{
if (!s.empty())
s.pop();
}
else if (str != "." && str != "")
s.push(str);

if (s.empty())
return "/";

string ret;
while(!s.empty())
{
ret = "/" + s.top() + ret;
s.pop();
}

return ret;
}
};

 

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