一尘不染

用Java算法制作直角金字塔

algorithm

__1
_1 2 1
___1 2 3 2 1
__1 2 3 4 3 2 1
__1 2 3 4 5 4 3 2 1
1 2 3 4 4 4 4 4 3 2 1
1 2 3 3 3 3 3 3 3 3 3 2 1
__1 2 2 2 2 2 2 2 2 2 2 2 2 2 1
_1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

我想使用Java创建此金字塔吗?有什么建议吗?


阅读 230

收藏
2020-07-28

共1个答案

一尘不染

这将达到目的。您可以将数字5更改为5以外的其他数字。1,2,3,..,6,8

public static void main(String[] args) {


    List<String> list = new LinkedList<String>();

    for(int i = 5; i > 0; i-- ){
        wrapWithNumber(list, i);
    }


    for (String string : editListToBeInTriangleShape(list)) {
        System.out.println(string);
    };
}

/**
      * Wrap the number strings in the llist with a perticular number.
 * @param list list of Strings
 * @param ba number which need to wrapp the list with.
 */
private void wrapWithNumber(List<String> list, final int ba) {

    list.add(0, String.format("%d",ba));

    for (int i = 1; i < list.size(); i++) {
        String newformat = "%1$d " + list.get(i) + " %1$d";
        list.remove(list.get(i));
        list.add(i,String.format(newformat, ba));
    }

    String lastFormat = "%1$d";
    for(int i = 0; i < 2 * list.size();i++){
        lastFormat += " %1$d";
    }

    if(list.size() != 1) {
        list.add(String.format(lastFormat, ba));
    }
}

/**
 * Arrage the Strings in the list in triangular manner.
 * @param list list of Strings.
 */
private List<String> editListToBeInTriangleShape(final List<String> list) {

    final List<String> returnList = new LinkedList<String>();

    for (int i = list.size(); i > 0; i--) {
        String s = list.get(list.size()-i);
        int possition = list.size()*2 + s.length()/2;
        returnList.add(String.format("%"+possition+"s", s));
    }

    return returnList;
}

放出这个:

                 1
               1 2 1
             1 2 3 2 1
           1 2 3 4 3 2 1
         1 2 3 4 5 4 3 2 1
       1 2 3 4 4 4 4 4 3 2 1
     1 2 3 3 3 3 3 3 3 3 3 2 1
   1 2 2 2 2 2 2 2 2 2 2 2 2 2 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2020-07-28