news 2026/7/5 5:54:28

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
拼多多笔试真题-对角线遍历矩阵(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])}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 5:54:23

如何用WechatRealFriends三步识别微信单向好友:告别隐形社交困扰

如何用WechatRealFriends三步识别微信单向好友&#xff1a;告别隐形社交困扰 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealF…

作者头像 李华
网站建设 2026/7/5 5:54:21

D3KeyHelper:免费开源的暗黑3终极自动化助手,5分钟告别重复操作

D3KeyHelper&#xff1a;免费开源的暗黑3终极自动化助手&#xff0c;5分钟告别重复操作 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破…

作者头像 李华
网站建设 2026/7/5 5:54:10

D3keyHelper完整指南:如何配置暗黑破坏神3鼠标宏提升游戏效率

D3keyHelper完整指南&#xff1a;如何配置暗黑破坏神3鼠标宏提升游戏效率 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否在暗黑破坏神3的高强…

作者头像 李华
网站建设 2026/7/5 5:51:42

Windows激活不再难:KMS_VL_ALL_AIO智能激活工具全方位指南

Windows激活不再难&#xff1a;KMS_VL_ALL_AIO智能激活工具全方位指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows系统未激活而烦恼&#xff1f;每天面对烦人的激活提…

作者头像 李华
网站建设 2026/7/5 5:50:07

零基础搭建微信AI机器人:WeChatFerry让每个人都能拥有智能助手

零基础搭建微信AI机器人&#xff1a;WeChatFerry让每个人都能拥有智能助手 【免费下载链接】WeChatFerry 微信机器人&#xff0c;可接入DeepSeek、Gemini、ChatGPT、ChatGLM、讯飞星火、Tigerbot等大模型。微信 hook WeChat Robot Hook. 项目地址: https://gitcode.com/GitHu…

作者头像 李华
网站建设 2026/7/5 5:49:02

程序员量化交易实战 34:识别行情数据缺口

第 33 篇开始从历史角度看模拟盘是否稳定。第 34 篇回到每日运行前的输入检查&#xff1a;如果目标股票里有价格缺失&#xff0c;系统应该明确报出缺口&#xff0c;而不是让策略在 None、0 或旧价格上继续跑。缺价格不是小事模拟盘里最危险的 bug 往往不是程序直接崩溃&#xf…

作者头像 李华