LeetCode-6. Z字形變換(找規律)
6. Z字形變換
將字串 "PAYPALISHIRING"
以Z字形排列成給定的行數:
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
#include<bits/stdc++.h>
using namespace std;
/********************提交程式碼********************/
char* convert(char* s, int numRows)
{
if(numRows==1) return s;//特殊處理1
int n=strlen(s),i=0,cnt=0;
int x=4+2*(numRows-3),y=0,z=0,t=0;
bool flag=true;//x和y均非零時true取x,false取y
char *ans=(char*)malloc((n+1)*sizeof(char));
for(; i<numRows; ++i)
{
ans[cnt++]=s[i];
t=i;
while(true)
{
if(flag)
z=x;
else
z=y;
if(x==0)//特殊處理第一行和最後一行
z=y;
else if(y==0)
z=x;
if(t+z>=n) break;//跳出條件
ans[cnt++]=s[t+z];
flag=!flag;
t+=z;
}
x-=2,y+=2,z=0;
flag=true;
}
ans[cnt]='\0';
return ans;
}
/***************************************************/
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("F:/cb/read.txt","r",stdin);
//freopen("F:/cb/out.txt","w",stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
char s[1000],ss[10];
while(cin.getline(s,1000))
{
int numRows;
cin>>numRows;
cout<<s<<endl;
cout<<numRows<<endl;
cout<<"/"<<convert(s,numRows)<<"/"<<endl;
cin.getline(ss,10);//吃回車符
}
return 0;
}
當作找規律來做的。
下標化成數字後Z型排列如下:
numRows=3時:
第一行數字之間相差4;
第二行數字之間相差2;
第三行數字之間相差4。
numRows=4時:
第一行數字之間相差6;
第二行數字之間相差4,2;
第三行數字之間相差2,4。
第四行數字之間相差6。
numRows=5時:
第一行數字之間相差8;
第二行數字之間相差6,2;
第三行數字之間相差4,4。
第四行數字之間相差2,6;
第五行數字之間相差8。
……………………分隔線……………………
依給定的行數,按行遍歷,找規律發現第一行和最後一行差值是4+2*(numRows-3)
豎著看,每行之間兩個差值相差2
x和y分別表示某行兩個相鄰數的差值(為保持一致性,第一行和最後一行加個0)
交替取x和y,用flag標記當前取x還是y
相關文章
- Leetcode——6. Z 字形變換LeetCode
- LeetCode 6.Z字形變換LeetCode
- 演算法-Z字形變換演算法
- LeetCode6: ZigZag Conversion(Z字形變換)LeetCode
- 2024.09.22 力扣刷題 Z字形變換力扣
- 打表找規律
- z 變換
- HDU 6298 Maximum Multiple(找規律)
- HUNAN -11566 Graduation Examination(找規律)NaN
- Z變換(2020.10.21)
- 每天一道演算法題:Z字形轉換演算法
- HDU-6415 Rikka with Nash Equilibrium (DP/找規律)UI
- Touring cities (找規律 哈密爾頓迴路)
- Gym - 101532A Subarrays Beauty(位操作找規律)
- ZOJ Monthly, January 2019 - A Little Sub and Pascal's Triangle(找規律)
- HDU 5795 A Simple Nim (SG函式+打表找規律)函式
- leetcode 解題 6. Z 字形變換-python3@ 官方二維陣列、list 設 flag 按行訪問法LeetCodePython陣列
- HDU 6415(dp/找規律-2018多校第九場1001)
- QOJ7789-一道位運算找規律好題
- CCF第二題之Z字形掃描(只有90分555555)
- z變換與s變換之間的轉換(一些零碎且不嚴謹的想法)
- 【LeetCode動態規劃#04】不同的二叉搜尋樹(找規律,有點像智力題)LeetCode動態規劃
- leedcode-單詞規律
- 三、凸透鏡成像規律
- LeetCode-單詞規律LeetCode
- LeetCode-290-單詞規律LeetCode
- 四、有一行電文,已按下面規律譯成密碼:A-->Z B-->Y C-->X a-->z b-->y c-->x...密碼
- HDU 2197 本原串 (規律+快速冪)
- 快三長龍有規律嗎?
- Java欄位初始化規律Java
- 如何探索事物的客觀規律?
- 圖片跨域規律探尋跨域
- 給定一個字串,按Z字形列印,在從左向右,從上往下列印字串字串
- python3 中 and 和 or 運算規律Python
- ●連續質數2.3.5.7.11.13.17.19的規律●(9)
- ●連續質數2.3.5.7.11.13.17.19的規律●(6)
- ●連續質數2.3.5.7.11.13.17.19的規律●(5)
- ●連續質數2.3.5.7.11.13.17.19的規律●(4)