首页 > 其他分享 >力扣6.N 字形变换(压缩矩阵)

力扣6.N 字形变换(压缩矩阵)

时间:2023-09-21 13:14:21浏览次数:35  
标签:numRows 字形 示例 int 矩阵 力扣 字符串 string

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

 

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

 

示例 2:
输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I

 

示例 3:

输入:s = "A", numRows = 1
输出:"A"

 

 

提示:

  • 1 <= s.length <= 1000
  • s 由英文字母(小写和大写)、',' 和 '.' 组成
  • 1 <= numRows <= 1000

二维矩阵暴力模拟:

 1 class Solution {
 2 public:
 3     char map[1000][1000]; //Z排列
 4     int x=0,y=0; //Z排列中当前坐标
 5     int index=0; //字符串中当前下标
 6     void up(int row,string s){
 7         for (int i=0;i<row-1&&index<s.length();++i){
 8             map[x][y]=s[index];
 9             //更新数据
10             x--;
11             y++;
12             index++;
13         }
14     }
15     void down(int row,string s){
16         for (int i=0;i<row-1&&index<s.length();++i){
17             map[x][y]=s[index];
18             //更新数据
19             x++;
20             index++;
21         }
22     }
23     string convert(string s, int numRows) {
24         string result;
25         memset(map,0,sizeof(map));
26         if (numRows==1||s.length()<=numRows){
27             return s;
28         }
29         while (index<s.length())
30         {
31             down(numRows,s);
32             up(numRows,s);
33         }
34         for (int i=0;i<numRows;++i){
35             for (int j=0;j<=y;++j){
36                 if (map[i][j]){
37                     result.push_back(map[i][j]);
38                 }
39             }
40         }
41         return result;
42     }
43 };

 

该题可以通过压缩矩阵来节省大量空间和遍历时间:

 1 class Solution {
 2 public:
 3     int x=0; //Z排列中当前行号
 4     vector<string> map; 
 5     int index=0; //字符串中当前下标
 6     void up(int row,string s){
 7         for (int i=0;i<row-1&&index<s.length();++i){
 8             map[x].push_back(s[index]);
 9             x--;
10             index++;
11         }
12     }
13     void down(int row,string s){
14         for (int i=0;i<row-1&&index<s.length();++i){
15             map[x].push_back(s[index]);
16             x++;
17             index++;
18         }
19     }
20     string convert(string s, int numRows) {
21         string result;
22         map.resize(numRows);
23         if (numRows==1||s.length()<=numRows){
24             return s;
25         }
26         while (index<s.length())
27         {
28             down(numRows,s);
29             up(numRows,s);
30         }
31         for (int i=0;i<numRows;++i){
32             result.append(map[i]);
33         }
34         return result;
35     }
36 };

 

标签:numRows,字形,示例,int,矩阵,力扣,字符串,string
From: https://www.cnblogs.com/coderhrz/p/17719714.html

相关文章

  • 力扣20.有效的括号
    给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。 示例1:输入:s="()"输出:true 示例 2:输入:s="()[]{}"......
  • 力扣14.最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例1:输入:strs=["flower","flow","flight"]输出:"fl" 示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。 ......
  • fortran求矩阵特征值
    拿来即用的求矩阵特征值的fortran程序摘自宋叶志《Fortran科学计算与工程》!-----------------------------------------------!input:A(n,n)为输入的n*n的矩阵,tol是迭代停止的阈值!output:namda为主特征值,u(n)为输入矩阵的n个特征值!-------------------------------......
  • 递归例题 力扣39 组合总数
    给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一......
  • 力扣1.两数之和
    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。 示例1:输入:nums=[2,......
  • springboot中配置类型转换,设置开启矩阵变量
    2023-09-17packagecom.hh.springboot05.config;importcom.hh.springboot05.bean.Pet;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.core.convert.converter.Conver......
  • 力扣上一道抽到英文原题现场还没写出来的easy难度的mid题
    646.MaximumLengthofPairChain 很难绷,今天去华东理工面试抽到了这个英文原题,虽然我也没写过,但是区间操作的题目大多都需要排序预处理,想到了排序预处理,也想到了第二个判断应该怎么写,第一个判断当时脑子一片空白,然后就一直卡在那,最后连最基本的思路都没说就进入了下一个环......
  • python系列教程215——列表解析与矩阵
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......
  • 【设计模式】访问者模式Visitor:实现对象级别的矩阵结构
    (目录)访问者模式:一个原理看似很简单,但是理解起来有一定难度,使用场景相对较少的行为型模式:它能将算法与其所作⽤的对象隔离开来假如有这样⼀位⾮常希望赢得新客户的资深保险代理⼈。他可以拜访街区中的每栋楼,尝试向每个路⼈推销保险。所以,根据⼤楼内组织类型的不同,他可......
  • 矩阵之稀疏矩阵
    说明  稀疏矩阵是一种特殊类型的矩阵,其中大多数元素都为零。相反,稠密矩阵是大多数元素都非零的矩阵。  稀疏矩阵在很多实际应用中非常常见,因为许多现实世界的数据都具有高度的稀疏性,意味着只有少数几个元素是非零的,而其他元素都是零。使用稀疏矩阵可以有效地节省存储空......