z变换

Leetcode 6: Z 字形变换

岁酱吖の 提交于 2019-12-08 06:54:07
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例 1: 输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN" 示例 2: 输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释: L D R E O E I I E C I H N T S G 代码 class Solution: def convert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows==1: return s ns = "" n = len(s) step = 2 * numRows - 2 for i in range(numRows): for j in

leetcode第6题:Z字形变换--直接模拟求解法

懵懂的女人 提交于 2019-12-06 08:57:28
【题目描述】 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 【解题思路】 对于Z字形,每行使用一个StringBuiler来记录,所以得到一个数组StringBuiler[numRows];通过数组下标y,记录当前方向的up,开始模拟构造Z字型。 【代码】 String convert(String s, int numRows) { if (numRows == 1) { return s; } StringBuilder[] builders = new StringBuilder[numRows]; for (int i = 0; i < numRows; i++) { builders[i] = new StringBuilder(); } // 核心代码快 char[] arr = s.toCharArray(); int y = 0; boolean up = false; for (int i = 0; i < arr.length;

傅里叶变换和拉普拉斯变换的物理解释及区别

雨燕双飞 提交于 2019-12-04 04:10:05
“ 傅里叶变换在物理学、数论、组合数学、信号处理、概率论、统计学、密码学、声学、光学、海洋学、结构动力学等领域都有着广泛的应用(例如在信号处理中,傅里叶变换的典型用途是将信号分解成幅值分量和频率分量)。 ” 傅里叶变换能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。 傅里叶变换是一种解决问题的方法,一种工具,一种看待问题的角度。 理解的关键是:一个连续的信号可以看作是一个个小信号的叠加,从时域叠加与从频域叠加都可以组成原来的信号,将信号这么分解后有助于处理。 我们原来对一个信号其实是从时间的角度去理解的,不知不觉中,其实是按照时间把信号进行分割,每一部分只是一个时间点对应一个信号值,一个信号是一组这样的分量的叠加。傅里叶变换后,其实还是个叠加问题,只不过是从频率的角度去叠加,只不过每个小信号是一个时间域上覆盖整个区间的信号,但他确有固定的周期,或者说,给了一个周期,我们就能画出一个整个区间上的分信号,那么给定一组周期值(或频率值),我们就可以画出其对应的曲线,就像给出时域上每一点的信号值一样,不过如果信号是周期的话 ,频域的更简单,只需要几个甚至一个就可以了,时域则需要整个时间轴上每一点都映射出一个函数值。

6――Z 字形变换(ZigZag Conversion)

匿名 (未验证) 提交于 2019-12-02 23:40:02
题目描述 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 1 2 3 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 1 示例1 输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN" 1 2 示例2 输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释: L D R E O E I I E C I H N T S G 1 2 3 4 5 6 7 8 例题解法: 因为我自己写的将近 100 行代码,实在不能看,所以就去看了解析,下面是解析的解法。 由题我们可知一般情况下输出的行数就是传入的 numRows,而当传入的字符串字符数小于 numRows 时,行数即为该字符串所包含的字符数,所以直接用 n(行数)个 StringBuilder 来存储每行的字符

LeetCode―― Z字形变换(Java)

匿名 (未验证) 提交于 2019-12-02 21:53:52
"PAYPALISHIRING" P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符: "PAHNAPLSIIGYIR" 实现一个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 输入: s = "PAYPALISHIRING", numRows = 3 输出: "PAHNAPLSIIGYIR" 输入: 输出: 解释: P I N A L S I G Y A H R P I class Solution {//直接开个二维数组模拟即可 public String convert(String s, int numRows) { if(numRows==1) { return s; } int l=s.length(); char map[][]=new char[numRows][l]; for(int i=0;i<numRows;i++) { for(int j=0;j<l;j++) { map[i][j]='0'; } } int count=0; for(int i=0;;i++) { for(int a=0;a<numRows;a++) { if(count==s.length()) break; map[a][2*i]=s.charAt(count); count++; }

【LeetCode】6. Z 字形变换

寵の児 提交于 2019-12-02 18:35:51
/*--> */ /*--> */ 题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L   C   I  R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 示例 1: 输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN" 示例 2: 输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解题 初看这题没什么头绪,只要我们把字母转换数字(字符的位置)就能发现其中规律,下面是一个长度16,4行排列的例子 0 6 12 1 5 7 11 13 2 4 8 10 14 3 9 15 题目就能转换为 原来字符串    0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 转换后字符串   0 6 12 1 5 7 11 13 2 4 8 10 14 3 9 15 上面例子两种情况 首行和尾行两个数字中间都是空 中间行两个数字间有且只有一个数字   首先想到按行读取,如果忽略有空位的列,规律还是很明显 0 -> 6 

06. Z字型变换

£可爱£侵袭症+ 提交于 2019-11-28 20:18:27
题目: 提交01: 1 class Solution { 2 3 public String convert(String s, int numRows) { 4 int length = 2*numRows-2; 5 if(numRows==1||s.equals("")||s.length()<=numRows){ 6 return s; 7 } 8 int loop = s.length()/length; 9 StringBuilder str = new StringBuilder(); 10 11 for(int i=0;i<numRows;i++){ 12 str.append(s.charAt(i)); 13 if(i!=0&&i!=numRows-1&&length-i<s.length()) { 14 str.append(s.charAt(length - i)); 15 } 16 17 18 for(int k=1;k<loop+1;k++){ 19 if(length*k+i<s.length()){ 20 str.append(s.charAt(length*k+i)); 21 } 22 23 if(i!=0&&i!=numRows-1&&length*(k+1)-i<s.length()){ 24 str.append(s.charAt(length*