首页 > 试题广场 >

打印菱形

[编程题]打印菱形
  • 热度指数:192 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请使用任意语言在屏幕上打印出一个n行n列的菱形。(输入参数为n,使用递增和递减数字填充输出)请注意需要对异常情况进行处理。 
例如N=5时输出屏幕为

**1** 
*121* 
12321 
*121* 
**1** 
示例1

输入

1

输出

"1"
示例2

输入

5

输出

"**1**|*121*|12321|*121*|**1**"
示例3

输入

4

输出

""

备注:
注意:换行符请用"|"替代!!!
【Python3】目前能想到的最简洁的方法
class Solution:
    def print_diamond(self , n ):
        if not n % 2:  # 处理特殊情况
            return ""
        res = ""
        for i in range(n//2, -1, -1):
            left = "*" * ((n-2*i-1)//2) + "".join(list(map(str, [j for j in range(1, i+1)])))
            # 每一行的输出 = 左字符串 + 中间的一个数字 + 翻转后的左字符串
            temp = left + str(i+1) + left[::-1]
            if i == n//2:
                res = res + temp
            else:
                res = temp + "|" + res + "|" + temp  # 利用对称,简化运算
        return res


发表于 2021-07-30 09:26:39 回复(0)
用笨办法解决了
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 输出菱形
# @param n int整型 行数&列数
# @return string字符串
#
class Solution:
    def solve(self, peak, n):
        s = ["*" for i in range(n)]
        m = n // 2
        for i in range(peak):
            s[m + i] = str(peak - i)
            s[m - i] = str(peak - i)
        return "".join(s)
    
    def print_diamond(self, n):
        if n % 2 == 0:
            return ""
        answer = ""
        for i in range(1, n):
            answer += self.solve(min(i, n + 1 - i), n)
            answer += "|"
        answer += self.solve(1, n)
        return answer


发表于 2025-04-02 08:15:36 回复(0)
代码臭了点,但是是最直观想到的方法

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 输出菱形
     * @param n int整型 行数&列数
     * @return string字符串
     */
    public String print_diamond (int n) {
        // write code here
        if((n&1)==0){
            return "";
        }
        Stack<String> stack = new Stack<>();
        StringBuilder res = new StringBuilder();
        // **1** 
        // *121* 
        // 12321
        int mid = n/2+1;
        // 对mid行进行操作
        for(int k=1;k<=mid;k++){
            StringBuilder builder = new StringBuilder();
            // 数字数目
            int nums = 2*(k-1)+1;
            // 星星数目
            int stars = n-nums;
            for(int i=0;i<stars;i++){
                if(i==stars/2){
                    for(int j=1;j<=k;j++){
                        builder.append(j);
                    }
                    for(int j=k-1;j>0;j--){
                        builder.append(j);
                    }
                }
                builder.append("*");
            }
            if(stars>0){
                stack.push("|"+builder.toString());
            }
            if(stars==0){
                for(int j=1;j<=mid;j++){
                    builder.append(j);
                }
                for(int j=mid-1;j>0;j--){
                    builder.append(j);
                }
                res.append(builder);
            }else{
                res.append(builder+"|");
            }
            
            
        }
        while(!stack.isEmpty()){
            res.append(stack.pop());
        }
        return res.toString();
    }
}


发表于 2024-09-04 19:45:30 回复(0)