c++刷题(43/100)矩阵旋转打印
题目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)矩阵旋转打印的更多相关文章
- leecode刷题(3)-- 旋转数组
leecode刷题(3)-- 旋转数组 旋转数组 给定一个数组,将数组中的元素向右移动 K 个位置,其中 K 是非负数. 示例: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5, ...
- 【洛谷 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, ...
- luogu题解 P1707 【刷题比赛】矩阵加速递推
题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...
- leetcode刷题-59螺旋矩阵2
题目 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 思路 与螺旋矩阵题完全一致 实现 class Solution: def generateM ...
- leetcode刷题-54螺旋矩阵
题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 思路 对于每个外层,从左上方开始以顺时针的顺序遍历所有元素.假设当前层的左上角位于(to ...
- Leetcode刷题之螺旋矩阵
矩阵之螺旋矩阵 总体思路: 注意遍历顺序 每次遍历一圈时候不要多加元素 Leetcode54螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. ...
- leetcode刷题-43字符串相乘
题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 思路 字符串转数字:从字符串第一位开始取,每次取出的值转换为数字 ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- 剑指offer刷题
1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次 ...
随机推荐
- scrapy 爬虫怎么写入日志和保存信息
写入日志: 首先我的爬虫 name= article scrapy crawl article -s LOG_FILE=wiki.log 输出为不同格式: scrapy crawl article - ...
- Sprint第二个计划
一.现状 现在是冲刺的第二个阶段了,我们的进度还是一样,没有太大的进展.所以这一个阶段应该加紧进度,好好学习别的组,弥补我们组的不足.一开始我们是打算用原来的初级APP,然后再补充一些新的内容.可是现 ...
- jQuery笔记(二)
$()下的常用方法 addClass():添加样式 removeClass():删除样式 $('div').addClass('box2 box4'); $('div').removeClass('b ...
- beta NO1
031602111 傅海涛 1.今天进展 笔记颜色统一,解决笔记的同步性和完整性 2.存在问题 office文档转换的时间问题 3.明天安排 增加新功能和完善之前的功能 4.心得体会 接口真难 031 ...
- java词频统计——改进后的单元测试
测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...
- spring注入 属性注入 构造器注入 set方法注入
spring注入 属性注入 构造器注入 set方法注入(外部bean注入)
- 一本通1630SuperGCD
1630:SuperGCD 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 来源:SDOI 2009 Sheng Bill 有着惊人的心算能力,甚至能用大脑计 ...
- CF1073E Segment Sum
数位DP,求[L,R]区间内所有"数字内包含的不同数码不超过k个的数字"之和.在状态上加一维状态压缩表示含有的数码集合.一开始读错题以为是求数字的个数.读对题之后调了一会儿. #i ...
- 【设计模式】—— 职责链模式ChainOfResponsibility
前言:[模式总览]——————————by xingoo 模式意图 避免请求的发送者,和接受者过度的耦合在一起.一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心.而请 ...
- linux课外命令
1.要知道linux是多少位的 在命令行输入 getconf LONG_BIT 返回32就是32位,返回64就是64位的. 2.CentOS-7-x86_64-DVD-1708.iso 这种代表64位 ...