Build Tower -- 6 Kyu

原题

https://www.codewars.com/kata/576757b1df89ecf5bd00073b/train/cpp

题目

Build Tower by the following given argument:
number of floors (integer and always greater than 0).
Tower block is represented as *
or example, a tower of 3 floors looks like below

[
  "  *  ", 
  " *** ", 
  "*****"
]

分析

实现比较简单,思路也有很多种。
本解法,先是构建了n层的空格字符串数组,再按照每层*的位置和长度进行填充覆盖。
所有解法都需要确定以下两个关系:

  1. 层数n与每个字符串长度l的关系:l = 2*n-1;
  2. 层数n与每个非空格字符位置的关系:n-i-1

上面两个关系可以使用数学归纳法非常简单的推导出来。

参考答案

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Kata{
public:
    vector<string> towerBuilder(int nFloors){
        size_t len = 2*nFloors-1;
        vector<string> res(nFloors,string(len,' '));
        for(size_t i=0;i<nFloors;i++){
            fill_n(res[i].begin()+(nFloors-i-1),2*i+1,'*');
        }
        return res;
    }
};

说明

容器初始化时可以指定初始化值,这样可以避免另外的复制操作。

其它

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容