Java 几何算法 打印图案 1*2*5*6 –3*4(Geometric Algorithms Print the pattern 1*2*5*6 –3*4)

给定整数 N,任务是打印一个倒三角形,其中左半部分由 [1, N*(N+1)/2] 范围内的元素组成,右半部分由 [N*(N+1)/2 + 1, N*(N+1)] 范围内的元素组成。

例子:

输入: N = 3 

输出: 
1*2*3*10*11*12
   4*5*8*9
      6*7

输入:n = 4

输出:
1*2*3*4*17*18*19*20
   5*6*7*14*15*16
      8*9*12*13
       10*11 

方法:

观察该图案,我们可以很容易地发现它遵循了 ZIG-ZAG 图案,首先从顶行到底行打印几个数字,然后从底行到顶行打印数字,数字越来越多

连字符模式:第i行的空格数为i*2 [此处 i 从 0 开始]

        由于数字在此锯齿形格式中按递增顺序排列,因此我们可以将这些数字存储在二维动态数组中,并根据每行空格数的情况相应地打印它们。

按照下面提到的步骤来实现这个想法:

1、创建一个大小为N*N的二维向量arr[],使得矩阵为N*N。
2、然后从上到下遍历数组并将第i行的数字(Ni)压入。
3、同样的,从下往上遍历,以同样的方式从下往上推送元素。
4、启动循环并遍历列并打印数组:
    4.1、然后,遍历i*2的长度,按递增的顺序打印每行前的空格。
    4.2、在行中的每个元素后打印*

下面是上述方法的实现:

// Java code to print the above pattern
 
import java.util.*;
 
class GFG {
 
    // Function to print the pattern
    public static void printPattern(int n)
    {
        List<List<Integer> > list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(new ArrayList<>());
        }
 
        int num = 1;
 
        // First Traversal top to bottom
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n - i; j++) {
                list.get(i).add(num++);
            }
        }
 
        // Second Traversal bottom to top
        for (int i = n - 1; i >= 0; i--) {
            for (int j = 0; j < n - i; j++) {
                list.get(i).add(num++);
            }
        }
 
        for (int i = 0; i < n; i++) {
            for (int ch = 0; ch < (i * 2); ch++) {
                // '-'s is printed before each row
                // in a increasing order
                System.out.print(' ');
            }
            for (int j = 0; j < list.get(i).size(); j++) {
                System.out.print(list.get(i).get(j));
                if (j != list.get(i).size() - 1) {
                    // * is not printed after
                    // the last element in a
                    // row
                    System.out.print('*');
                }
            }
            System.out.println();
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int N = 3;
 
        // Function call
        printPattern(N);
    }

输出
1*2*3*10*11*12 
  4*5*8*9 
    6*7

时间复杂度: O(N 2 )

辅助空间: O(N 2 )  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值