69. Sqrt(x)

题目

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

  1. class Solution {
  2. public:
  3. int mySqrt(int x) {
  4. int a[]={,,,,,,,,,};
  5. if(x<=)
  6. return a[x];
  7.  
  8. unsigned long long left=,right=x;
  9.  
  10. unsigned long long middle= (left + right)>>;
  11. while(left<=right)
  12. {
  13. middle = (left + right)>>;
  14. if(middle * middle <x)
  15. {
  16. left = middle+;
  17.  
  18. }
  19. else if(middle * middle > x)
  20. {
  21. right = middle - ;
  22.  
  23. }
  24. else
  25. return middle;
  26. }
  27. if(middle * middle > x)
  28. middle--;
  29. //if(middle * middle < x)
  30. // middle++;
  31. return middle;
  32. }
  33. };

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

70. Climbing Stairs

题目

分析:费波拉契数列

代码如下:

  1. class Solution {
  2. public:
  3. int climbStairs(int n) {
  4. // Start typing your C/C++ solution below
  5. // DO NOT write int main() function
  6.  
  7. if(n <= )
  8. {
  9. return n;
  10. }
  11. else
  12. {
  13. int* step = new int[n];
  14.  
  15. step[] = ;
  16. step[] = ;
  17.  
  18. for(int i = ; i < n; i++)
  19. {
  20. step[i] = step[i-] + step[i-];
  21. }
  22. return step[n-];
  23. }
  24. }
  25. };

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

71. Simplify Path

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

代码如下:

  1. class Solution {
  2. public:
  3. string simplifyPath(string path) {
  4. // Start typing your C/C++ solution below
  5. // DO NOT write int main() function
  6. stack<string> s;
  7. string str;
  8. for(int i = ; i < path.size(); i++)
  9. {
  10. if (path[i] == '/')
  11. {
  12. if (str == "..")
  13. {
  14. if (!s.empty())
  15. s.pop();
  16. }
  17. else if (str != "." && str != "")
  18. {
  19. s.push(str);
  20. }
  21.  
  22. str = "";
  23. }
  24. else
  25. {
  26. str += path[i];
  27. }
  28. }
  29.  
  30. if (str == "..")
  31. {
  32. if (!s.empty())
  33. s.pop();
  34. }
  35. else if (str != "." && str != "")
  36. s.push(str);
  37.  
  38. if (s.empty())
  39. return "/";
  40.  
  41. string ret;
  42. while(!s.empty())
  43. {
  44. ret = "/" + s.top() + ret;
  45. s.pop();
  46. }
  47.  
  48. return ret;
  49. }
  50. };

Leetcode题解(23)的更多相关文章

  1. LeetCode题解-23 合并K个排序链表 Hard

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1-&g ...

  2. [LeetCode题解]23. 合并K个升序链表 | 分治 + 递归

    方法一:分治 + 递归 解题思路 在21. 合并两个有序链表,我们知道如何合并两个有序链表.而本题是合并 k 个有序链表,可以通过大问题拆分成小问题解决,即把 k 个链表,拆分成 k/2 个链表组,俩 ...

  3. 【LeetCode题解】347_前K个高频元素(Top-K-Frequent-Elements)

    目录 描述 解法一:排序算法(不满足时间复杂度要求) Java 实现 Python 实现 复杂度分析 解法二:最小堆 思路 Java 实现 Python 实现 复杂度分析 解法三:桶排序(bucket ...

  4. 【LeetCode题解】7_反转整数

    目录 [LeetCode题解]7_反转整数 描述 方法一 思路 Java 实现 类似的 Java 实现 Python 实现 方法二:转化为求字符串的倒序 Java 实现 Python 实现 [Leet ...

  5. 【LeetCode题解】349_两个数组的交集

    目录 [LeetCode题解]349_两个数组的交集 描述 方法一:两个哈希表 Java 实现 类似的 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 ...

  6. [LeetCode 题解]: Roman to Interger

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given a ro ...

  7. [LeetCode题解]: Sort Colors

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given an a ...

  8. [LeetCode 题解]: Maximum Subarray

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Find the c ...

  9. [LeetCode 题解]:Gas Station

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 There are ...

  10. [LeetCode 题解]: plusOne

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given a no ...

随机推荐

  1. Linux Ubuntu从零开始部署web环境及项目-----搭建ssh环境(一)

    linux搭建ssh环境 1,用户登录 成功输入用户名和密码后 进入Ubuntu界面  2,配置网络 参考:http://blog.csdn.net/liu782726344/article/deta ...

  2. HTML5基本标签的使用

    第一次写这种东西,肯定存在许多不足之处,还望大家多多担待,我会继续加油的!我也是一名HTML5的初学者,只是将这几周在课堂上所听到的东西分享给大家. 下面给大家介绍一下H5! 一.<!DOCTY ...

  3. angular学习笔记02 angular指令大全

    第一步 先要引入angular, 第二步  在 html 标签中<html  ng-app>  加入ng-app(这是个必须的,不然会报错) 接下来就可以去使用angular的各种指令了. ...

  4. GCD之异步同步体会

    前面的博文也有写到同步异步,可能是看他人的博文,自己没有实验,感觉理解不深,所以就敲了些代码比较一下串行.并行分别对应的同步.异步. 1.首先创建串行.并行线程队列 1 2 dispatch_queu ...

  5. 3.bootstrap-组件

    1.图标 <button type="button" class="btn btn-default"> <span class="g ...

  6. javascript篇-----数据类型

    ECMAScript中一共有6种数据类型,其中包括5种基本数据类型(Undefined,Null,Boolean,Number,String)以及一种复杂数据类型(Object).[ES6增加多了一种 ...

  7. 在Storyboard中为UITableView添加Header和Footer

    我在这里所说的Header和Footer并不是sectionHeader和sectionFooter,而是指UITableView的tableHeaderView和tableFooterView,这两 ...

  8. [UWP]创建一个进度按钮

    1. 前言 最近想要一个进度按钮. 传统上UWP上处理进度可以这样实现,首先是XAML,包括一个ProgressBar和一个按钮: <StackPanel Orientation="H ...

  9. 【转】elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  10. JS类继承常用方式发展史

    JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...