首页 > 编程语言 >leetcode 6 Z字形变化 C/C++ 找规律解法 / 用容器的解法

leetcode 6 Z字形变化 C/C++ 找规律解法 / 用容器的解法

时间:2022-10-06 00:55:22浏览次数:55  
标签:string int ret numRows C++ mod leetcode 解法 vec

找规律 , 除了一行 和 两行需要特殊处理之外,其他的规律是一样的。 /* class Solution { public:     string convert(string s, int numRows) {         int len = s.size();         string ret_str(s);         if(numRows == 1){             return ret_str;         }         if(numRows == 2){             int i = 0;             for(; i < (len+1)/2; i++){                 ret_str[i] = s[i*2];             }             for(int j = 0;i+j < len;j++){                 ret_str[i+j] = s[j*2 + 1];              }             return ret_str;         }         int between_Z = 2*numRows - 2;         int index =0;         for(int i = 0;i < numRows; i++){             int initial_num = i;             int mul = 0;             while(initial_num + mul*between_Z < len){                 ret_str[index] = s[initial_num + mul*between_Z];                 if( i != 0 && i != numRows-1 && initial_num + mul * between_Z + numRows - i - 1 + numRows - i - 1 < len){                    index++;                    ret_str[index] = s[initial_num + mul * between_Z + numRows - i - 1 + numRows - i - 1];                    index++;                 }else{                     index++;                 }                 mul++;                 }         }         return ret_str;     } }; */

用动态数组存储不同行的字符,每个周期内的元素 取模 只会落在竖列 或者 落在 斜列 ,分这两种情况进行讨论即可 ,具体的字符应该放在哪一个动态数组的序列中是可以用模  行数计算出来的。

 

class Solution { public:     string convert(string s, int numRows) {           int len = s.size();           string ret_str(s);         if(numRows == 1){             return ret_str;         }         if(numRows == 2){             int i = 0;             for(; i < (len+1)/2; i++){                 ret_str[i] = s[i*2];             }             for(int j = 0;i+j < len;j++){                 ret_str[i+j] = s[j*2 + 1];              }             return ret_str;         }         vector<string> ret_vec(numRows);         int mod_distance = numRows + numRows - 2;         for(int i = 0 ;i < len; i++){             /*             if(i%mod_distance ==0){                 ret_vec[0].append(s[i]);              }else              if(i%mod_distance == numRows-1){                 ret_vec[numRows - 1].append(s[i]);             }else              if(i%mod_distance < numRows && i%mod_distance > 0){                 ret_vec[i%mod_distance].append(s[i]);             }else              */             if(i%mod_distance < mod_distance && i%mod_distance >=numRows){                 ret_vec[2*numRows - 2 - i%mod_distance] .push_back(s[i]);             }else{                 ret_vec[i%mod_distance].push_back(s[i]);             }         }         string s2;         for(auto it = ret_vec.begin();it != ret_vec.end();it++){             s2.append(*it);         }         return s2;     } };

标签:string,int,ret,numRows,C++,mod,leetcode,解法,vec
From: https://www.cnblogs.com/daniel123/p/16756892.html

相关文章

  • 数据结构-关键路径解法思路
    关键路径是有向带权无环图的一种寻求路径的算法,采用四组数据,两组点的,两组边的,表格化后一目了然。分别是:ve(k),vl(k),e(i),l(i)点:k表示点的标识ve:最早发......
  • LeetCode 15 - 并查集
    所谓并查集,是指支持集合的合并和查询操作的数据结构。合并:将两个集合合并为一个。查询:查询某个元素属于哪个集合,通常是返回集合内的一个代表元素(例如二叉树的所有结点可......
  • C++ 泛型(模板与容器)
    文章目录​​一、泛型的基本思想:​​​​函数模板的性质​​​​C++模版函数/类的语法​​​​类模板的性质​​​​二、C++STL简介​​​​2.1算法(algorithm)​​​​2.......
  • C++虚函数
    C++三大特性:封装、继承、多态在这里谈下多态,多态指的是在类之间存在继承关系时,有的函数声明为virtual函数,当我们将子类指针或引用转化为父类指针或引用时,调用某个虚函数时......
  • 【教奶奶学SQL】(task6)秋招秘籍A(leetcode刷题)
    学习总结(1)敲黑板:练习第六题再看看,还欠最后1题困难题。(2)​​​猴子题解电子书​​文章目录​​学习总结​​​​练习一:各部门工资最高的员工(leetcode184难度:中等)​​​​......
  • OpenCV-Python-C++ 全套视频详讲
    更多资料请关注公众号:计算机视觉与图形学实战​​2021OpenCV-C++课程实践(理论与实践)​​​​2021年OpenCV-Python从入门到实战全套课程(附带课程课件资料+课件笔记)​​​​......
  • C++complex 中学到的知识
    #ifndef__COMPLEX__#define__COMPLEX__classComplex{ public: //传值 complex(doubler=0,doublei=0) :re(r),im(i) {} complex&operator+......
  • C++/Python混合编程
    以C++为底层基础,Python作为上层建筑,共同搭建起高性能、易维护、可扩展的混合系统。Python本身就有C接口,可以用C语言编写扩展模块,把一些低效耗时的功能改用C实现......
  • 【c++基础】从json文件提取数据
    前言标注数据导出文件是json格式的,也就是python的dict格式,需要读取标注结果,可以使用c++或者python,本文使用c++实现的。JsonCpp简介JsonCpp是一种轻量级的数据交换格式,是个跨......
  • C++的基本数据类型
    C++的基本数据类型C++的数据类型可分为:1. 布尔类型:false0 true 12. 字符类型:可分为三种,char、signedchar、unsignedchar,其表现形式只是分为有符号和无符号,字符......