61. 旋转链表

难度中等333

给定一个链表,旋转链表,将链表每个节点向右移动 个位置,其中 是非负数。

示例 1:

输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL

示例 2:

输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL

软微题?

不过要冷静一些....注意情况啊

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* rotateRight(ListNode* head, int k) {if(k==0||head==NULL) return head;int cnt=0;//链表的长度ListNode* tmp=head;ListNode* last=head;while(tmp!=NULL){cnt++;tmp=tmp->next;if(cnt==1) continue;last=last->next;}k=k%cnt;//就跟数组一样 0-cnt-1if(k==0) return head;//观察他们的改变//0-1-2-NULL      2 -> 0-1 ->NUll//1-2-3-4-5-NULL  4-5-> 1-2-3->NULL  需要修改两处//所以需要记住第 cnt-k个  第cnt-k-1个ListNode* node1;ListNode* node2;tmp=head;node1=tmp->next;node2=tmp;int m=cnt-k-1;while(m--){node1=node1->next;node2=node2->next;}//修改last->next=head;node2->next=NULL;return node1;}
};

这样写就更好一些,因为有两个都是相邻的

public ListNode rotateRight(ListNode head, int k) {if (head == null || head.next == null || k == 0) return head;int count = 1; // 用来统计链表总结点数ListNode tmp = head;while (tmp.next != null) {count++;tmp = tmp.next;}k %= count;// 当k为0时,不需要旋转,if (k == 0) return head;// 不满足上述条件,必将进行旋转,所以先将首尾相连tmp.next = head;// 现在只需要找到倒数第k+1个节点for (int i = 0; i < count - k; i++) {tmp = tmp.next;}ListNode newHead = tmp.next;tmp.next = null;return newHead;
}

62. 不同路径

难度中等680

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

例如,上图是一个7 x 3 的网格。有多少可能的路径?

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3
输出: 28

提示:

  • 1 <= m, n <= 100
  • 题目数据保证答案小于等于 2 * 10 ^ 9

class Solution {
public://其实是排列组合啦!int uniquePaths(int m, int n){vector<vector<int>> v(m+1,vector<int>(n+1,0));for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(i==1&&j==1) v[i][j]=1;else if(i==1||j==1) v[i][j]=1;else v[i][j]=v[i-1][j]+v[i][j-1];}}return v[m][n];}
};class Solution {
public:int uniquePaths(int m, int n) {vector<int>dp(n, 1);for(int i = 1; i < m; ++i) {for(int j = 1; j < n; ++j) {dp[j] += dp[j-1];}}return dp[n-1];}
};

63. 不同路径 II

难度中等408

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 10 来表示。

说明:m 和 n 的值均不超过 100。

示例 1:

输入:
[[0,0,0],[0,1,0],[0,0,0]
]
输出: 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右
class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size();if(m==0) return 0;int n=obstacleGrid[0].size();vector<vector<int>> dp(m,vector<int>(n,0));for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(obstacleGrid[i][j]==1){dp[i][j]=0;continue;}else if(i==0&&j==0) dp[i][j]=1;else if(i==0) dp[i][j]=dp[i][j-1];else if(j==0) dp[i][j]=dp[i-1][j];else dp[i][j]=dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
};class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int n = obstacleGrid.size(), m = obstacleGrid.at(0).size();vector <int> f(m);f[0] = (obstacleGrid[0][0] == 0);for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (obstacleGrid[i][j] == 1) {f[j] = 0;continue;}if (j - 1 >= 0 && obstacleGrid[i][j - 1] == 0) {f[j] += f[j - 1];}}}return f.back();}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/unique-paths-ii/solution/bu-tong-lu-jing-ii-by-leetcode-solution-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

64. 最小路径和

难度中等667

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[[1,3,1],[1,5,1],[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
class Solution {
public:int minPathSum(vector<vector<int>>& grid) {int m=grid.size();int n=grid[0].size();for(int i=0;i<m;i++){for(int j =0;j<n;j++){if(i==0&&j==0) continue;if(i==0) grid[i][j]+=grid[i][j-1];else if(j==0) grid[i][j]+=grid[i-1][j];else grid[i][j]=min(grid[i-1][j],grid[i][j-1])+grid[i][j];}}return grid[m-1][n-1];}
};

65暂时跳

66. 加一

难度简单541给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

特解只有100000000哦

class Solution {
public:vector<int> plusOne(vector<int>& digits) {int n=digits.size();if(n==0) return digits;int carry=1;for(int i=n-1;i>=0;i--){digits[i]+=carry;carry=digits[i]/10;digits[i]%=10;}if(carry==0){return digits;}vector<int> ans(n+1,0);ans[0]=1;return ans;//只可能是100000}
};

67. 二进制求和

难度简单469

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

直接看答案

class Solution {public String addBinary(String a, String b) {StringBuilder ans = new StringBuilder();int ca = 0;for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {int sum = ca;sum += i >= 0 ? a.charAt(i) - '0' : 0;sum += j >= 0 ? b.charAt(j) - '0' : 0;ans.append(sum % 2);ca = sum / 2;}ans.append(ca == 1 ? ca : "");return ans.reverse().toString();}
}作者:guanpengchn
链接:https://leetcode-cn.com/problems/add-binary/solution/hua-jie-suan-fa-67-er-jin-zhi-qiu-he-by-guanpengch/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

68看起来好难咯

69. x 的平方根

难度简单500

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

此题请拿二分练手/重写下哈

class Solution {
public:int mySqrt(int x) {int l = 0, r = x, ans = -1;while (l <= r) {int mid = l + (r - l) / 2;if ((long long)mid * mid <= x) {ans = mid;l = mid + 1;} else {r = mid - 1;}}return ans;}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

70. 爬楼梯

难度简单1229

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶
class Solution {
public:int climbStairs(int n) {if(n==1) return 1;if(n==2) return 2;vector<int> v(n+1);v[1]=1;v[2]=2;for(int i=3;i<=n;i++) v[i]=v[i-1]+v[i-2];return v[n];}
};class Solution {
public:int climbStairs(int n) {if(n==1) return 1;if(n==2) return 2;vector<int> v(n+1);v[1]=1;v[2]=2;for(int i=3;i<=n;i++) v[i]=v[i-1]+v[i-2];return v[n];}
};

LeetCode 61-70题 这是动态规划合集啊?受宠若惊相关推荐

  1. 【算法】1041- 图解 LeetCode第 70 题爬楼梯问题

    最近开始努力研究算法,遇到这个很有意思的题目,因为从中复习到斐波那契数列,又通过某篇资料,查到中科院官网,看了很多科普文章.深挖下去能看到很多东西. 本着热爱分享的初衷,整理本文与大家分享,题目本身没 ...

  2. c语言奥林匹克大赛真题,全球首发!1-58届国际数学奥林匹克真题及解析大合集,350道必刷、必看、必收藏的巅峰之题与巧解妙解......

    在数学竞赛的江湖中, 被无数人称为解题大师的单墫教授曾说:"学数学的目的,就是为了学会解题,在这个过程中,去巩固所学的知识,提高能力,更好更多的去掌握数学的内容.意义和方法, 而这个过程很重 ...

  3. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!

    Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...

  4. Java算法——爬楼梯(LeetCode第70题)

    问题描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 分析 题目中给出,上台阶的方式只有两种,一种为一步跨一阶,一种为 ...

  5. Leetcode题库(数据库合集)

    目录 难度:简单 1. 组合两个表 2. 第二高的薪水 3. 第N高的薪水 4. 分数排名 5. 连续出现的数字 6. 超过经理收入的员工 7. 重新 8. 寻找用户推荐人 9. 销售员 10. 排名 ...

  6. LeetCode和剑指offer题目大合集

    AlgorithmCode 本仓库收集一些算法的答案,目标是整理一套系统的算法参考答案以供其他学习者参考,我也在慢慢的学算法并且在坚持刷题,我会不定期的上传新的题目,希望大家共同努力! https:/ ...

  7. 2022数维杯关于CD题的完整思路合集代码+论文

    资料获取方式我放到下面了,欢迎小伙伴一起学习交流 2022数维杯国际赛C题: https://mbd.pub/o/bread/Y5yVlp1x   2022年数维杯国际赛[D题:拉尼娜事件]思路模型代 ...

  8. LeetCode部分刷题笔记!!!JavaScript!!!

    详细解说请看视频JS老毕:人人都能看得懂的Leetcode力扣刷题教程合集 边看视频边记录笔记!!!部分题目在视频中无! 文章目录 LeetCode第1题:1. 两数之和 LeetCode第2题:2. ...

  9. 《LeetCode力扣练习》第70题 爬楼梯 Java

    <LeetCode力扣练习>第70题 爬楼梯 Java 一.资源 题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶 ...

最新文章

  1. 阿里资深算法专家:如何突围大厂算法面试?
  2. 连接oracle内存溢出,Linux主机内存溢出导致oracle的SYS用户无法正常登陆
  3. Adaboost通俗易懂入门教程
  4. 云容器实例服务入门必读
  5. python绘制简单图形-python绘制数学图形(堪比matlab)
  6. 最佳适应算法模拟内存分配
  7. 开源软件加密授权方案_身份验证和授权作为开源解决方案服务
  8. 略读《大教堂与市集》
  9. de-emphasis
  10. java微信刷卡支付demo_微信刷卡支付例子
  11. 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)
  12. linux检查nfs服务,Linux-nfs服务
  13. win10自动停用打印服务器,win10系统添加打印机总是自动关闭打印服务的技巧介绍...
  14. 腾讯教育 App Flutter 跨端点播组件实践
  15. OrCAD/Pspice元件库说明
  16. SPSS之多因素方差分析
  17. 张萌韩墨羽——Toolbar和DrawerLayout+SlideMenu 2种方式实现抽屉侧滑
  18. 我国传统-基本能力常识
  19. Mysql5.7 的错误日志中最常见的note级别日志解释
  20. JavaScript 教程,很好的!

热门文章

  1. 阿里云视频服务(视频边缘智能服务)接入流程
  2. 智能优化算法之遗传算法python实现细节,GA库函数调用方法
  3. Batch Normalization和Dropout
  4. 导入mdf文件的两种方法
  5. 存储过程常用开关(set命令解析)
  6. SAP License:SAP常见问题与解决办法(汇总帖)
  7. python查找文字在图片中的位置_如何快速提取出图片中文字,强烈推荐这款免费软件!...
  8. 用金碟软件二次开发ERP是否有前途?
  9. Adobe Reader PDF阅读器闪退问题解决(批处理)
  10. 基于GoogLeNet实现鸟类识别任务