代码该不该精简

来源:互联网 发布:美国研究生申请 知乎 编辑:程序博客网 时间:2024/04/28 21:50

 

项目接近收尾阶段,不是我这种小罗罗该忙的时候了。所以我趁着有空,小小研究了我以前笔试做到过的一道算法题吧。本科毕业一年不到,应届生那个找工作难啊,像我这种没技术小学校出来的软件工程的学生,找工作更加困难。那时候好像有倒题目,我记得大概是画着一个用星号组成菱形的图案,然后让你写程序把这个图像打印出来。因为是在笔试时候,我也懒得浪费脑细胞,二话不说直接,print出来。效果是达到了,总觉得会被人鄙视。后来大概由于找工作过于忙,对这题目也没有深究。今天闲着无事,就拿出来再做做。

我一共用了2个方法,一个是用比较罗嗦的方法,对每一行的星号和空格进行分析,最后实现出来。

具体代码:

 

    private static void makeSquare(int n){
        
int cc = 2*n;
        
for (int i = 0; i < cc-1 ; i++{
            
if (i == 0 || i == cc - 2{
                System.out.println(makeSpace(n
-1+ "" + makeSpace(n-1));
            }
else if(i == n-1){
                System.out.println(
"" + makeSpace(cc - 3+ "");
            }
else{
                
if (i < n-1{
                    System.out.println(makeSpace(n 
- 1 - i) + "" + makeSpace(2 * i - 1+ "" + makeSpace(n - 1 - i));
                }
else{
                    System.out.println(makeSpace(i 
- n + 1+ "" + makeSpace(4 * n - 2 * i - 5+ "" + makeSpace(i - n + 1));
                }

            }

        }


    }

    
private static String makeSpace(int n){
        String retStr 
= "";
        
for (int i = 0; i < n; i++{
            retStr 
+= "";
            
        }

        
return retStr;
    }

 另外还有一种就是利用斜率来做

 

    private static void makeSquare1(int n)
        
for (int i = 1; i < 2*n; i++
            
for (int j = 1; j < 2*n; j++{
                
if (Math.abs(j - i) == n - 1 || j + i == n + 1 || j + i == 3*- 1{
                    System.out.print(
"");
                }
else{
                    System.out.print(
"");
                }

            }

            System.out.println(
"");
        }

    }

下面的代码相比上面的代码,虽然精简了一些。但是效率绝对没有上面的程序高。如果传入参数都是1000的话,

上面的方法是只要5秒多的时间,下面的方法要22秒多。仔细分析了下原因,第一种方法是按照行来做判断的,

虽然写的代码多了,但是少了很多的逻辑判断,为CPU减少了负担。第二种方法虽然代码精简了,可是它是按照每个元素来判断的,它的判断步数就多了,相比之下我还是喜欢第一种代码,如果不知道题目的情况下,第一种代码比第2种代码好理解吧。所以不一定精简的代码就效率最高,或许只是我写的代码不够好,如果哪位大侠有更好的实现方法,既快又简便的话,贴上来告诉我哦。

原创粉丝点击