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
相關文章
- 演算法-Z字形變換演算法
- Leetcode——6. Z 字形變換LeetCode
- LeetCode 6.Z字形變換LeetCode
- 打表找規律
- LeetCode6: ZigZag Conversion(Z字形變換)LeetCode
- 2024.09.22 力扣刷題 Z字形變換力扣
- HDU 6298 Maximum Multiple(找規律)
- HDU 4951 Multiplication table(找規律)
- 每天一道演算法題:Z字形轉換演算法
- Touring cities (找規律 哈密爾頓迴路)
- HDU5139 Formula (找規律+離線處理)ORM
- HDU 5795 A Simple Nim (SG函式+打表找規律)函式
- codeforces 340CTourist Problem(找規律數學題)
- HUNAN -11566 Graduation Examination(找規律)NaN
- HDU-6415 Rikka with Nash Equilibrium (DP/找規律)UI
- Gym - 101532A Subarrays Beauty(位操作找規律)
- HDU 5439 Aggregated Counting(找規律+預處理)
- 【組合數+找規律】codeforces 815B - Karen and Test
- HDU 2897-邂逅明下(博弈-SG函式打表找規律)函式
- QOJ7789-一道位運算找規律好題
- ZOJ Monthly, January 2019 - A Little Sub and Pascal's Triangle(找規律)
- HDU 1847 Good Luck in CET-4 Everybody!(找規律版巴什博奕)Go
- EMS單號規律與順豐單號規律(C#)C#
- HDU 1847-Good Luck in CET-4 Everybody!(博弈-SG函式/找規律)Go函式
- leetcode 解題 6. Z 字形變換-python3@ 官方二維陣列、list 設 flag 按行訪問法LeetCodePython陣列
- A Multiplication Game (博弈,規律)GAM
- JavaScript時間日期轉換成漢字形式JavaScript
- 淺談Oracle中隱式型別轉換規律和影響Oracle型別
- 【LeetCode動態規劃#04】不同的二叉搜尋樹(找規律,有點像智力題)LeetCode動態規劃
- normal redundancy Diskgroup裡required_mirror_free_mb值的變化規律ORMUI
- z變換與s變換之間的轉換(一些零碎且不嚴謹的想法)
- leedcode-單詞規律
- 圖片跨域規律探尋跨域
- LeetCode-單詞規律LeetCode
- 索引的應用規律總結索引
- Java欄位初始化規律Java
- 山東省第四屆ACM大學生程式設計競賽-Alice and Bob(二進位制&&找規律)ACM程式設計
- 軟體開發的21條規律