当前位置: 首页 > news >正文

拼多多笔试真题-对角线遍历矩阵(C++/Py/Java /Js/Go)

对角线遍历矩阵

拼多多技术岗 7月3号笔试 第一题

题目内容

给你一个大小为mmm×nnn的矩阵matmatmat,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素,对角线遍历的顺序如图所示。

输入描述

第一行包含两个整数mmmnnn,表示矩阵的行数和列数(1≤m,n≤1001 \le m,n \le 1001m,n100)。
接下来的mmm行,每行包含nnn个整数,表示矩阵的元素(整数范围在[−10000,10000][-10000, 10000][10000,10000]之间)。

输出描述

输出一行,包含按对角线遍历顺序排列的矩阵元素,元素之间用空格隔开。

样例1

输入

3 3 1 2 3 4 5 6 7 8 9

输出

7 4 8 9 5 1 2 6 3

题解和思路

思路

实现思路:模拟

  1. 按照题目给出的示例进行模拟即可,主要考虑边界情况。
  2. 当走反对角时,走到j==0时移动规律
    1. i==0时需要将j--
    2. i != 0需要将i--
  3. 当走对角,走到j==m-1时移动规律
    1. i == n -1, 需要将j++
    2. j == m -1, 需要将i--
  4. 总体时间复杂度为O(n * m)

C++

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn,m;cin>>n>>m;vector<vector<int>>grid(n,vector<int>(m));for(inti=0;i<n;i++){for(intj=0;j<m;j++){cin>>grid[i][j];}}vector<int>ans(n*m);intindex=0;// 0 反对角 1对角intflag=0;inti=n-1,j=0;while(index<n*m){ans[index++]=grid[i][j];if(flag==0){if(i==0){j++;flag=1;}elseif(j==0){i--;flag=1;}else{i--;j--;}}else{if(i==n-1){j++;flag=0;}elseif(j==m-1){i--;flag=0;}else{i++;j++;}}}//输出结果for(inti=0;i<n*m;i++){if(i>0){cout<<" ";}cout<<ans[i];}return0;}

Java

importjava.io.*;importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args)throwsException{BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));StringBuildersb=newStringBuilder();Stringline;while((line=br.readLine())!=null){sb.append(line).append(" ");}String[]input=sb.toString().trim().split("\\s+");intidx=0;intn=Integer.parseInt(input[idx++]);intm=Integer.parseInt(input[idx++]);int[][]grid=newint[n][m];for(inti=0;i<n;i++){for(intj=0;j<m;j++){grid[i][j]=Integer.parseInt(input[idx++]);}}int[]ans=newint[n*m];intindex=0;// 0 反对角 1对角intflag=0;inti=n-1,j=0;while(index<n*m){ans[index++]=grid[i][j];if(flag==0){if(i==0){j++;flag=1;}elseif(j==0){i--;flag=1;}else{i--;j--;}}else{if(i==n-1){j++;flag=0;}elseif(j==m-1){i--;flag=0;}else{i++;j++;}}}// 输出结果StringBuilderout=newStringBuilder();for(intk=0;k<n*m;k++){if(k>0){out.append(" ");}out.append(ans[k]);}System.out.print(out.toString());}}

python

importsys data=list(map(int,sys.stdin.read().split()))idx=0n=data[idx]idx+=1m=data[idx]idx+=1grid=[[0]*mfor_inrange(n)]foriinrange(n):forjinrange(m):grid[i][j]=data[idx]idx+=1ans=[0]*(n*m)index=0# 0 反对角 1对角flag=0i=n-1j=0whileindex<n*m:ans[index]=grid[i][j]index+=1ifflag==0:ifi==0:j+=1flag=1elifj==0:i-=1flag=1else:i-=1j-=1else:ifi==n-1:j+=1flag=0elifj==m-1:i-=1flag=0else:i+=1j+=1# 输出结果print(*ans)

Javascript

constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});constinput=[];rl.on("line",(line)=>{input.push(...line.trim().split(/\s+/));});rl.on("close",()=>{letidx=0;constn=Number(input[idx++]);constm=Number(input[idx++]);constgrid=Array.from({length:n},()=>Array(m));for(leti=0;i<n;i++){for(letj=0;j<m;j++){grid[i][j]=Number(input[idx++]);}}constans=newArray(n*m);letindex=0;// 0 反对角 1对角letflag=0;leti=n-1,j=0;while(index<n*m){ans[index++]=grid[i][j];if(flag===0){if(i===0){j++;flag=1;}elseif(j===0){i--;flag=1;}else{i--;j--;}}else{if(i===n-1){j++;flag=0;}elseif(j===m-1){i--;flag=0;}else{i++;j++;}}}// 输出结果console.log(ans.join(" "));});

Go

packagemainimport("bufio""fmt""os")funcmain(){in:=bufio.NewReader(os.Stdin)varn,mintfmt.Fscan(in,&n,&m)grid:=make([][]int,n)fori:=0;i<n;i++{grid[i]=make([]int,m)forj:=0;j<m;j++{fmt.Fscan(in,&grid[i][j])}}ans:=make([]int,n*m)index:=0// 0 反对角 1对角flag:=0i,j:=n-1,0forindex<n*m{ans[index]=grid[i][j]index++ifflag==0{ifi==0{j++flag=1}elseifj==0{i--flag=1}else{i--j--}}else{ifi==n-1{j++flag=0}elseifj==m-1{i--flag=0}else{i++j++}}}// 输出结果out:=bufio.NewWriter(os.Stdout)deferout.Flush()fork:=0;k<n*m;k++{ifk>0{fmt.Fprint(out," ")}fmt.Fprint(out,ans[k])}}
http://www.jsqmd.com/news/1126429/

相关文章:

  • 解放双手的炉石传说智能伴侣:Hearthstone-Script完全解析
  • 如何用PCL启动器轻松打造你的专属Minecraft世界:从零开始的完整指南
  • 机场安检触摸终端选型指南:X光机操作台、证件核验闸机与安检信息系统
  • 如何轻松录制40+平台直播:StreamCap开源工具的完整指南
  • 宏基因组测序
  • LinkSwift:九大网盘直链下载技术方案深度解析
  • 逆向工程入门:从CrackMe实战解析序列号验证与动态调试
  • 企业级RAG权限安全全链路方案:从向量检索到生成的安全实践
  • AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章08:多模态Agent的构建与应用
  • 钢质、断桥铝防火窗价差成因,原材料与工艺差异详解
  • 如何三步快速清理微信单向好友:终极完整指南
  • 终极指南:专业高效处理华为光猫加密配置文件的完整解决方案
  • NVIDIA深度研究资源实战指南与优化技巧
  • 第021章:ComfyUI文生音频Qwen3-TTS模型数字人音色设计(二)
  • 如何在3分钟内安装DeepL翻译插件:免费开源的专业翻译解决方案
  • 微信好友关系检测终极指南:三步找出单向好友的完整教程
  • 视场角 (FOV) 计算与校准:5 步完成工业相机镜头选型,误差 < 5%
  • WindowsCleaner:你的Windows系统清理专家,告别C盘爆红的烦恼
  • SchoolCMS开源教务管理系统:5步打造高效智能的学校管理平台
  • 终极macOS窗口置顶指南:Topit让你的多任务效率翻倍
  • 如何用WechatRealFriends三步识别微信单向好友:告别隐形社交困扰
  • 运维转大模型:换个角度,从岗位要求反推能力栈
  • LangChain AI Agent 架构实战:从链到图的五大核心概念与落地路径
  • 2026最新4款学生党平替AI编程工具vibe coding权威实测合集
  • 基于Agentic AI与提示工程的教育AI自动化批改系统设计与实践
  • VMD 变分模态分解 Python 实战:3 个关键参数 (alpha, K, tau) 调优与信号重构误差分析
  • Solr+Spark构建高维AB测试数据中枢
  • DeepL Chrome扩展终极指南:浏览器中的专业翻译助手
  • TPFanCtrl2:ThinkPad双风扇控制终极指南,让你的笔记本电脑更安静高效
  • D3KeyHelper:免费开源的暗黑3终极自动化助手,5分钟告别重复操作