日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【LeetCode】6.Z 字形变换

發布時間:2024/9/30 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode】6.Z 字形变换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

6.Z 字形變換

我的思路貌似沒有第二家,不過我懶得解釋了。

#include <string> #include <iostream> using namespace std;template<typename T> T ConvertZ(const T& vec, int N) {if (N <= 1)return vec;T ret;int n = N - 1;int n2 = n * 2;int length = vec.size();ret.resize(length);//組數-1int m = length / n2;//最后一組的元素數量 [0, 2n)int other = length - m * n2;//最后一組的每行元素數量(一共N行)int* last = new int[N]();//首尾行特殊判斷if (other > 0){last[0] = 1;if (other > n){last[n] = 1;}}//其余行for (int i = 1; i != N; ++i){if (i < other)last[i] += 1;if (n2 < other + i)last[i] += 1;}//第n行前的數量求和for (int i = 0; i != N; ++i){last[i] += m;//組數//第一行和最后一行只加mif (i != 0 && i != n)last[i] += m;if (i > 0)last[i] += last[i - 1];}for (int i = 0; i != length; ++i){//余數int mu = i % n2;//組號int div = i / n2;if (mu == 0){ret[div] = vec[i];}else if (mu == n){ret[last[n - 1] + div] = vec[i];}else if (mu < n){ret[last[mu - 1] + div * 2] = vec[i];}else if (mu > n){ret[last[n2 - mu - 1] + div * 2 + 1] = vec[i];}}delete[] last;return ret; }int main() {wcout << L"---------------------string is------------------------" << endl;wstring str0 = L"PAYPALISHIRING";wcout << str0 << L" -> " << ConvertZ(str0, 3) << " should be \"PAHNAPLSIIGYIR\"" << endl;wcout << str0 << L" -> " << ConvertZ(str0, 4) << " should be \"PINALSIGYAHRPI\"" << endl; }

?

總結

以上是生活随笔為你收集整理的【LeetCode】6.Z 字形变换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。