zoukankan      html  css  js  c++  java
  • [算法练习]ZigZag Conversion

    题目说明:

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    P   A   H   N
    A P L S I I G
    Y   I   R
    And then read line by line: "PAHNAPLSIIGYIR"

    Write the code that will take a string and make this conversion given a number of rows:

    string convert(string text, int nRows);

    convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

    程序代码:

    #include <gtest/gtest.h>
    using namespace std;
    
    string convert(string s, int numRows)
    {
        if (s.empty() || (numRows < 2))
        {
            return s;
        }
    
        string result;
        int length = s.length();
        char* data = new char[length*numRows];
        memset(data,0,length * numRows);
    
        int delta = 0;
        int offset = 0;
        int flag = 1;
    
        for (int i= 0; i<length; ++i)
        {
            data[offset + delta * length] = s[i];        
            if ( (delta+flag) >= numRows)
            {
                flag = -1;
            }
            else if ((delta+flag) < 0)
            {
                flag = 1;
            }
            delta += flag;
    
            if (flag == -1)
            {
                offset ++;
            }
        }
    
        for (int i=0; i<numRows; ++i)
        {
            for (int j=0; j < length; ++j)
            {
                if (data[j+i*length])
                    result += data[j+i*length];
            }
        }
    
        delete data;
    
        return result;
    }
    
    TEST(Pratices, tZigZagConversion)
    {
        // ''=> ''
        // ABCDEFG 3 => A   E  => AEBDFCG
        //              B D F 
        //              C   G
    
        ASSERT_EQ(convert("",1),"");
        ASSERT_EQ(convert("ABCDEFG",1),"ABCDEFG");
    }
  • 相关阅读:
    一个经典的页面布局
    巧避new的一个原型设计模式
    讲解关于javascript的继承
    根据指定日期 算出该周的一周日期
    原型实现的一个观察者模式
    减少类之间的耦合性
    Android 代码下载
    (转)open gl 实例 demo vs2005 环境
    Tile editor 快捷键
    这是第一篇博客~
  • 原文地址:https://www.cnblogs.com/Quincy/p/5289848.html
Copyright © 2011-2022 走看看