题目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),这样逻辑会比较清晰

class Solution {
public:
void print(vector<vector<int> > matrix,int tx,int ty,int bx,int by,vector<int> &ans){
if(tx>bx||ty>by) return ;
if(bx==tx){
for(int i=ty;i<=by;i++){
ans.push_back(matrix[tx][i]) ;
}
}else if(by==ty){
for(int i=tx;i<=bx;i++){
ans.push_back(matrix[i][ty]) ;
}
}else{
for(int i=ty;i<by;i++){
ans.push_back(matrix[tx][i]) ;
}
for(int i=tx;i<bx;i++){
ans.push_back(matrix[i][by]) ;
}
for(int i=by;i>ty;i--){
ans.push_back(matrix[bx][i]) ;
}
for(int i=bx;i>tx;i--){
ans.push_back(matrix[i][ty]) ;
}
}
}
vector<int> printMatrix(vector<vector<int> > matrix) {
int m = matrix.size() ;
int n = matrix[].size() ;
int t = m<n? m : n ;
vector<int> ans ;
for(int i=;i<t;i++){
print(matrix,+i,+i,m--i,n--i,ans) ;
}
return ans ;
}
};

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

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

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

class Solution {
public:
struct Pos{
int x , y ;
Pos(int x,int y){
this->x = x ;
this->y = y ;
}
};
int movingCount(int threshold, int rows, int cols)
{
queue<Pos> q ;
int ans = ;
vector<vector<int>> vis(rows,vector<int>(cols)) ;
int a[] = {,,-,} ;
int b[] = {-,,,} ;
Pos p(,) ;
q.push(p) ; while(!q.empty()){
Pos t = q.front() ;
q.pop() ;
if(t.x>=rows||t.y>=cols||t.x<||t.y<) continue ;
if(vis[t.x][t.y]) continue ;
string sumStr = to_string(t.x)+to_string(t.y) ;
int sum = ;
for(int i=;i<sumStr.length();i++){
sum += sumStr[i]-'' ;
}
if(sum>threshold) continue ;
vis[t.x][t.y] = ;
ans++ ;
for(int i=;i<;i++){
Pos next(t.x+a[i],t.y+b[i]) ;
q.push(next) ;
}
}
return ans ;
}
};

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

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

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

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        ListNode *p1 = pHead1;
        ListNode *p2 = pHead2;
        while(p1!=p2){
            p1 = (p1==NULL ? pHead2 : p1->next);
            p2 = (p2==NULL ? pHead1 : p2->next);
        }
        return p1;
}
};

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. 谈谈我对Manacher算法的理解

    Manacher算法其实是求字符串里面最长的回文. ①在学习该算法前,我们应该知道回文的定义:顺序读取回文和逆序读取回文得到的结果是一样的,如:abba,aba. 那么我们不难想到,在判断一个字符串s ...

  2. “Linux内核分析”实验三报告

    构造一个简单的Linux系统 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000290 ...

  3. LINUX内核分析第六周学习总结——进程的描述和进程的创建

    LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  4. Hadoop 5 Hbase 遇到的问题

    hbase伪分布式配置完成后: 在bin/hbase shell 进行create操作时出现:Can't get master address from ZooKeeper; znode data = ...

  5. A02-java学习-classpath配置-标识符-java变量类型

    学习 1, classpath的配置和使用 2, java的标识符命名规则和命名规范 3, 字符编码 4, java的变量类型 5, 程序的入口main方法解释

  6. Java 笔记——在 IDEA 中使用 Maven 配置和使用 MyBatis

    1.前言 MyBatis 是什么? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...

  7. Windows 下安装redis 并且设置开机自动启动的过程.

    1. 下载redis 的 windows下的安装文件 https://github.com/MicrosoftArchive/redis/releasesmsi文件下载地址https://github ...

  8. BZOJ2753 SCOI2012滑雪与时间胶囊(最小生成树)

    首先显然可以把所有能到的点拎出来建个新图,这样第一问也就做好了. 剩下的部分似乎是一个裸的最小树形图.但显然这个东西是没什么学的必要的并且不太能跑过去. 考虑建出来的图有什么性质.可以发现如果没有高度 ...

  9. php中的动态变量的一个应用

    原文:https://www.cnblogs.com/JimmyBright/p/9869168.html 某些情况下,可以代替switch语句,大大简化代码,非常有意思哦 $list = [ [ ' ...

  10. Linux SSH免登陆配置步骤

    [jans@centos2 ~]# cd ~[jans@centos2 ~]# ssh-keygen -t rsa  //生成rsa加密的公钥和密钥[jans@centos2 ~]# cat .ssh ...