当前位置: 首页 > news >正文

bluecode-螺旋阵列的神秘艺术

问题描述

小C发现了一种奇特的图案,叫做螺旋阵列。它由一串0和1组成,看起来像一个由外向内旋转的图形。小C想知道,能否根据给定的宽度来生成这样一个螺旋图案。

例如,宽度为5时的螺旋阵列如下:

11111
00001
11101
10001
11111

宽度为10时的螺旋阵列如下:

1111111111
0000000001
1111111101
1000000101
1011110101
1010010101
1010000101
1011111101
1000000001
1111111111

小C想知道,对于任意给定的宽度 n,是否能生成对应的螺旋图案,并且以一个二维数组的形式输出。


测试样例

样例1:

输入:width = 5
输出:[[1, 1, 1, 1, 1], [0, 0, 0, 0, 1], [1, 1, 1, 0, 1], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1]]

样例2:

输入:width = 8
输出:[[1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 1, 0, 1], [1, 0, 1, 0, 0, 1, 0, 1], [1, 0, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1]]

样例3:

输入:width = 2
输出:[[1, 1], [0, 1]]

 

#include <cassert>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

std::vector<std::vector<int>> solution(int width) {
  // Ensure the input width is greater than 1
  assert(width > 1);

  // Handle special cases
  if (width == 2) {
    return {{1, 1}, {0, 1}};
  }
  if (width == 3) {
    return {{1, 1, 1}, {0, 0, 1}, {1, 1, 1}};
  }

  // Recursively generate a smaller spiral
  vector<vector<int>> base = solution(width - 2);

  // Initialize the first two rows
  vector<vector<int>> res;
  res.push_back(vector<int>(width, 1));
  res.push_back(vector<int>(width, 0));
  res[1][width - 1] = 1;

  // Add the smaller spiral in reverse order with borders
  for (int i = width - 3; i >= 0; i--) {
    vector<int> row = base[i];
    reverse(row.begin(), row.end());
    row.push_back(0);
    row.push_back(1);
    res.push_back(row);
  }

  // Fix the second last element of the last row
  res[res.size() - 1][res[0].size() - 2] = 1;
  return res;
}

int main() {
  // You can add more test cases here
  std::vector<std::vector<int>> expected1 = {{1, 1, 1, 1, 1},
                                             {0, 0, 0, 0, 1},
                                             {1, 1, 1, 0, 1},
                                             {1, 0, 0, 0, 1},
                                             {1, 1, 1, 1, 1}};
  std::vector<std::vector<int>> expected2 = {
      {1, 1, 1, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 1},
      {1, 1, 1, 1, 1, 1, 0, 1}, {1, 0, 0, 0, 0, 1, 0, 1},
      {1, 0, 1, 0, 0, 1, 0, 1}, {1, 0, 1, 1, 1, 1, 0, 1},
      {1, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 1, 1, 1, 1, 1, 1}};
  std::vector<std::vector<int>> expected3 = {{1, 1}, {0, 1}};

  std::cout << (solution(5) == expected1) << std::endl;
  std::cout << (solution(8) == expected2) << std::endl;
  std::cout << (solution(2) == expected3) << std::endl;

  return 0;
}

相关文章:

  • 从头开始学C语言第三十五天——指针函数、递归函数
  • 修改菜品-02.代码开发
  • Copilot完全指南:AI编程助手的革命性实践
  • WEB或移动端常用交互元素及组件 | Axure / 元件类型介绍(表单元件、菜单和表格 、流程元件、标记元件)
  • 口腔种植全流程AI导航系统及辅助诊疗与耗材智能化编程分析
  • TDengine 中的命名与边界
  • Go 语言标准库中time模块详细功能介绍与示例
  • 自动化发布工具CI/CD实践Jenkins部署与配置教程
  • 网络空间安全(43)Linux实战篇
  • 深度解析衡石科技HENGSHI SENSE嵌入式分析能力:如何实现3天快速集成
  • vue状态管理器pinia、pinia-plugin-persist持久化储存
  • 鸿蒙Next-集成HmRouter的路由模式
  • Vala编程语言教程-属性
  • 鸿蒙OS 5.0 服务能力框架深入剖析
  • 手机零售行业的 AI 破局与创新降本实践 | OceanBase DB大咖说
  • 《第三次世界大战》第一章:战争的前夜
  • Java StringUtils工具类常用方法详解
  • COMPASS:通过残差强化学习和技能合成实现跨具身移动策略
  • 深入解剖Linux进程:从诞生到调度的核心机制
  • 2.1-WAF\CDN\OSS\反向代理\负载均衡
  • 医院网站规划方案/win10系统优化软件
  • 阿里云域名注册云盾/专业seo培训学校
  • 怎样做网站-百度/企业网站建设模板
  • wordpress做旅游网站/最新搜索引擎排名
  • 网站底色什么颜色好看/快速整站优化
  • 互联网医院网站建设/全球网站排名查询