codewars-6kyu-give a diamond(打印菱形)

来源:互联网 发布:数据恢复精灵免费吗 编辑:程序博客网 时间:2024/06/08 15:22

今天练习的题目是打印砖石(菱形),就是给定行数(奇数行),用符号“*”打印。以前练习过这类的练习,于是乎,用了几个for循环完成了,代码如下:

  function diamond(n){  var str1 = '',str2 = '';  var a = (n+1)/2;  if(n%2 == 0 || n <= 1){    return null;  }else{    for(var i = 1; i <= n; i++){      if(i <= a){  for(var j = a-i; j > 0;j--){          str1 = str1 + " ";        }        for(var k = 1; k <=2*i-1;k++){          str1 = str1 + "*";        }        str1 = str1 + "\n";}else{        for(var j = i-a; j > 0;j--){          str2 = str2 + " ";        }        for(var k = 1; k <=2*(n-i)+1;k++){          str2 = str2 + "*";        }        str2 = str2 + "\n";     }      }    }    return str1 + str2;   }

虽然实现了,但是觉得自己真的是弱爆了,为了实现这一功能用了那么多个循环,而且代码量也够大。做完之后,又到了学习大神们的时候了,我们来看看大神的写法:


codewars大神算法1:

function diamond(n){  if( n%2==0 || n<1 ) return null  var x=0, add, diam = line(x,n);  while( (x+=2) < n ){    add = line(x/2,n-x);    diam = add+diam+add;  }  return diam;}//z.function repeat(str,x){return Array(x+1).join(str); }function line(spaces,stars){ return repeat(" ",spaces)+repeat("*",stars)+"\n"; }


codewars大神算法2:

function diamond(n){  if (n < 0 || n % 2 == 0) return null;  for (var i = 0, diamond = ''; i < n; i++) {    var stars = n - Math.abs(n - 2*i - 1);    var spaces = (n - stars) / 2;    while (spaces-- > 0) diamond += ' ';    while (stars-- > 0) diamond += '*';    diamond += '\n';  }  return diamond;}


原创粉丝点击