题目:杰米是个程序员,也是詹姆斯的女朋友。她喜欢钻石,想从詹姆斯那里得到一根钻石串。既然詹姆斯不知道怎么做,他需要你的帮助。
任务:您需要使用星号(*)字符返回在屏幕上打印时看起来像菱形的字符串。应删除尾随空格,并且每一行必须以换行符(\n)结尾。
返回null/nil/None/。。。如果输入是偶数或负数,则无法打印偶数或负数大小的钻石。
三颗钻石:
* *** *
显示为
" *\n***\n *\n"
五颗钻石:
* *** ***** *** *
显示为
" *\n ***\n*****\n ***\n *\n"
第一次尝试
function diamond(n) {
if (n > 1 && n % 2 == 0) {
return null
}
let diam = ""
const digui = (e) => {
if (e == 1) {
let arr = []
for (let i = 0; i < n / 2 - .5; i++) {
arr.push(" ")
}
arr[arr.length] = "*"
arr[arr.length + 1] = "\n"
let a = arr.join("")
if (n == 1) {
diam = a
return;
}
diam = a + diam + a
return
} else if (e == n) {
let arr = []
for (let i = 0; i < e; i++) {
arr.push("*")
}
arr[arr.length + 1] = "\n"
diam = arr.join("")
digui(e - 2)
} else {
let arr = []
for (let i = 0; i < (n - e) / 2; i++) {
arr.push(" ")
}
for (let j = 0; j < e; j++) {
arr.push("*")
}
arr.push("\n")
let a = arr.join("")
diam = a + diam + a
digui(e - 2)
}
}
digui(n)
return diam;
}
结果是对的,但是测试报了溢出内存,于是请教了下有了第二版。
第二次尝试
const diamond = n => {
if (n < 1 || n % 2 == 0) {
return null
}
if (n == 1) {
return "*\n"
}
let arr = [],
diam = "";
for (let i = 1; i <= n; i += 2) {
arr.push(i)
}
let brr = [...arr]
let arrMax = brr.pop()
arrMax = (arrMax + 1) / 2;
arr = [...arr, ...brr.reverse()]
for (let j = 0; j < arr.length; j++) {
arrMax--;
console.log(arrMax)
diam += " ".repeat(Math.abs(arrMax)) + "*".repeat(arr[j]) + "\n"
}
return diam
}
这次算是提交成功了,但是还不是很简洁,但是进去了就可以看到大佬的答案,(⊙﹏⊙)
大佬的
function diamond (n) {
if (n <= 0 || n % 2 === 0) return null
str = ''
for (let i = 0; i < n; i++) {
let len = Math.abs((n-2*i-1)/2)
str += ' '.repeat(len)
str += '*'.repeat(n-2*len)
str += '\n'
}
return str
}
function diamond(n){
if (n < 0 || !(n % 2)) return null;
const middleIndex = Math.floor(n / 2);
return Array.apply(null, {length: n})
.map((el, index) => {
const indentation = Math.abs(index - middleIndex);
const numberOfAsterisks = n - indentation * 2;
return Array(indentation + 1).join(' ') + Array(numberOfAsterisks + 1).join('*');
})
.join('\n') + '\n';
}
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;
}
给跪了,还需努力,加油!