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 字形变换相关推荐

  1. [模拟|字符串] leetcode 6 Z字形变换

    [模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...

  2. LeetCode 6.z字形变换

    LeetCode 6.z字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时, ...

  3. Java实现 LeetCode 6 Z字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  4. LeetCode——6. Z 字形变换

    6. Z 字形变换(中等难度) 题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING ...

  5. LeetCode 6. Z 字形变换(找规律)

    1. 题目 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I ...

  6. Leetcode 006. Z 字形变换 | 每日一题

    题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I ...

  7. LeetCode 6 Z字形变换

    将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"PAHNAP ...

  8. Leetcode 6.Z 字形变换 (每日一题 20210630)

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列.比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A ...

  9. leetcode —— 6. Z 字形变换

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T ...

  10. LeetCode 6. Z 字形变换 (N字形变换)

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P ...

最新文章

  1. SQL四种语言:DDL,DML,DCL,TCL
  2. 【Android】RxJava的使用(一)基本用法
  3. 电费结算(electric)
  4. html5决战沙城源码,决战沙城h5符文玩法介绍 怎么获得完美首通
  5. mysql映射超_Hibernate的映射类型 hibernate mysql映射类型
  6. 看到一个暴强的翻译,闲的蛋疼,写个c#版的
  7. 图---邻接矩阵 建立,深度遍历,广度遍历
  8. [计算机网络] - HTTP、HTTPS
  9. 链式添加_涂料导电炭黑添加量
  10. 【三维路径规划】基于matlab广度优先搜索算法无人机三维路径规划【含Matlab源码 270期】
  11. Linux入门基础命令教程
  12. kubernetes: CNI解读
  13. Adobe illustrator(AI) 矢量图形软件 | 图像描摹(怎么把白色背景色的图片背景变为透明色)
  14. 程序员实习期馒头加酸菜,转正后月薪10K起步:走路都带风
  15. MCU实现低功耗注意事项
  16. 学习python的记录1-通过if语句实现猜拳游戏
  17. Kafka 2.8.0 正式发布,增加了哪些新特性?
  18. (推荐)Swift入门级免费视频 - 只需学习8小时
  19. 配置CLion clang-format保存时自动格式化
  20. win10搜索服务器文件慢,Win10系统怎么加快文件搜索速度

热门文章

  1. html框架集把那根框架隐藏,HTML 框架集 frameset 和内嵌框架 iframe
  2. 九、Docker快速搭建Elastic Stack(上篇)
  3. 三十七、深入Vue.js组件Component(下篇)
  4. ​GPLinker:基于GlobalPointer的实体关系联合抽取
  5. 从近年顶会论文看领域自适应(Domain Adaptation)最新研究进展
  6. GPT v.s. 中国象棋:写过文章解过题,要不再来下盘棋?
  7. 无监督领域迁移及文本表示学习的相关进展
  8. 神经网络架构搜索(NAS)综述 | 附AutoML资料推荐
  9. ACM公选课第八节DP基础3 2020.4.23-5.10补
  10. web公选课第三节2020.5.18