题目1:矩阵旋转打印

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

思路:打印的时候一圈一圈的打印,记录两个对角(0,0),(m,n),这样逻辑会比较清晰

  1. class Solution {
  2. public:
  3. void print(vector<vector<int> > matrix,int tx,int ty,int bx,int by,vector<int> &ans){
  4. if(tx>bx||ty>by) return ;
  5. if(bx==tx){
  6. for(int i=ty;i<=by;i++){
  7. ans.push_back(matrix[tx][i]) ;
  8. }
  9. }else if(by==ty){
  10. for(int i=tx;i<=bx;i++){
  11. ans.push_back(matrix[i][ty]) ;
  12. }
  13. }else{
  14. for(int i=ty;i<by;i++){
  15. ans.push_back(matrix[tx][i]) ;
  16. }
  17. for(int i=tx;i<bx;i++){
  18. ans.push_back(matrix[i][by]) ;
  19. }
  20. for(int i=by;i>ty;i--){
  21. ans.push_back(matrix[bx][i]) ;
  22. }
  23. for(int i=bx;i>tx;i--){
  24. ans.push_back(matrix[i][ty]) ;
  25. }
  26. }
  27. }
  28. vector<int> printMatrix(vector<vector<int> > matrix) {
  29. int m = matrix.size() ;
  30. int n = matrix[].size() ;
  31. int t = m<n? m : n ;
  32. vector<int> ans ;
  33. for(int i=;i<t;i++){
  34. print(matrix,+i,+i,m--i,n--i,ans) ;
  35. }
  36. return ans ;
  37. }
  38. };

题目2:机器人的运动范围

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

思路:反正我一看就想到了搜索,由于之前做了推箱子,感觉很快就写出来了,搜索关键就是对于能否继续搜索下去的条件判断,这道题除了越界和它的那个阈值判断就没了

  1. class Solution {
  2. public:
  3. struct Pos{
  4. int x , y ;
  5. Pos(int x,int y){
  6. this->x = x ;
  7. this->y = y ;
  8. }
  9. };
  10. int movingCount(int threshold, int rows, int cols)
  11. {
  12. queue<Pos> q ;
  13. int ans = ;
  14. vector<vector<int>> vis(rows,vector<int>(cols)) ;
  15. int a[] = {,,-,} ;
  16. int b[] = {-,,,} ;
  17. Pos p(,) ;
  18. q.push(p) ;
  19.  
  20. while(!q.empty()){
  21. Pos t = q.front() ;
  22. q.pop() ;
  23. if(t.x>=rows||t.y>=cols||t.x<||t.y<) continue ;
  24. if(vis[t.x][t.y]) continue ;
  25. string sumStr = to_string(t.x)+to_string(t.y) ;
  26. int sum = ;
  27. for(int i=;i<sumStr.length();i++){
  28. sum += sumStr[i]-'' ;
  29. }
  30. if(sum>threshold) continue ;
  31. vis[t.x][t.y] = ;
  32. ans++ ;
  33. for(int i=;i<;i++){
  34. Pos next(t.x+a[i],t.y+b[i]) ;
  35. q.push(next) ;
  36. }
  37. }
  38. return ans ;
  39. }
  40. };

题目三:两个链表的第一个公共节点

输入两个链表,找出它们的第一个公共结点。

思路:按照长度差,让长度长的先走,然后对比每个节点,如果都没有就返回NULL,然而网上的解答比较厉害,mark一下

  1. /*
  2. struct ListNode {
  3. int val;
  4. struct ListNode *next;
  5. ListNode(int x) :
  6. val(x), next(NULL) {
  7. }
  8. };*/
  9. class Solution {
  10. public:
  11. ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
  12.         ListNode *p1 = pHead1;
  13.         ListNode *p2 = pHead2;
  14.         while(p1!=p2){
  15.             p1 = (p1==NULL ? pHead2 : p1->next);
  16.             p2 = (p2==NULL ? pHead1 : p2->next);
  17.         }
  18.         return p1;
  19. }
  20. };

c++刷题(43/100)矩阵旋转打印的更多相关文章

  1. leecode刷题(3)-- 旋转数组

    leecode刷题(3)-- 旋转数组 旋转数组 给定一个数组,将数组中的元素向右移动 K 个位置,其中 K 是非负数. 示例: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5, ...

  2. 【洛谷 P1707】 刷题比赛 (矩阵加速)

    题目连接 很久没写矩阵加速了,复习一下,没想到是一道小毒瘤题. 状态矩阵\(a[k],b[k],c[k],a[k+1],b[k+1],c[k+1],k,k^2,w^k,z^k,1\) 转移矩阵 0, ...

  3. luogu题解 P1707 【刷题比赛】矩阵加速递推

    题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...

  4. leetcode刷题-59螺旋矩阵2

    题目 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 思路 与螺旋矩阵题完全一致 实现 class Solution: def generateM ...

  5. leetcode刷题-54螺旋矩阵

    题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 思路 对于每个外层,从左上方开始以顺时针的顺序遍历所有元素.假设当前层的左上角位于(to ...

  6. Leetcode刷题之螺旋矩阵

    矩阵之螺旋矩阵 总体思路: 注意遍历顺序 每次遍历一圈时候不要多加元素 Leetcode54螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. ...

  7. leetcode刷题-43字符串相乘

    题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 思路 字符串转数字:从字符串第一位开始取,每次取出的值转换为数字 ...

  8. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  9. 剑指offer刷题

    1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次 ...

随机推荐

  1. 重温jsp①

    Jsp就是一个servlet servlet的缺点 不适合设置html响应体,需要response.Getwriter.print(); 优点:动态资源,可以编程. Jsp:在原有的html中加入了J ...

  2. 黄金分割点(第五周 c语言版)

    在上一周,学习其他课程的同时,用C语言编写了黄金分割点小游戏.因为要做界面需要mfc,当时学的时候还做了个简单的计算器.目前c++的知识忘的差不多了,所以就先用C语言来实现算法.打算接下来的一周复习c ...

  3. 高效获取网页源码COM

    目前获取网页源码有几种方法: 1.WebClient下载页面2.HttpWebRequest发请求获取3.com组件xmlhttp获取 三者比较:WebClient代码最少,效率最慢:xmlhttp代 ...

  4. nodeJs上传附件

    两种方案: 这两种方案传参还是有区别额 在nodeJs中上传附件调用了 multer 的中间件,采用这个中间件来上传 首先是表单(前端部分): <!DOCTYPE html> <ht ...

  5. SQL Server 删除重复数据只保留一条

    DELETE FROM Bus_TerminalMessage_Keywords WHERE Content IN (select Content from Bus_TerminalMessage_K ...

  6. 从零开始学Kotlin-使用接口(7)

    从零开始学Kotlin基础篇系列文章 定义接口 使用关键字interface定义接口 interface InterfaceDemo7 { } 类或对象可以实现一个或者多个接口 class demo7 ...

  7. blog 社会化评论插件 多说for china, disqus for global range

    1.disqus https://disqus.com/ https://publishers.disqus.com/engage https://disqus.com/admin/create/ h ...

  8. Delphi实现DBGrid全选和反选功能

    Delphi实现Dbgrid全选和反选.清除全选的功能,不管是在Delphi下,还是在WEB开发中,这种功能都是很实用的,是进行数据批量操作的基础.本模块就是实现了为Delphi的DBGrid数据列表 ...

  9. Codeforces Round #442 (Div. 2)A,B,C,D,E(STL,dp,贪心,bfs,dfs序+线段树)

    A. Alex and broken contest time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  10. 如何用React, Webcam和JS Barcode SDK创建Web扫码App

    这篇文章分享下如何结合React Webcam和Dynamsoft JavaScript Barcode SDK来创建Web扫码App. Web实时扫码 从GitHub上下载react-webcam. ...