4444
333
22
1
22
333
4444
我只会做1上面那半
console.log(4444);
console.log(333);
console.log(22);
console.log(1);
console.log(22);
console.log(333);
console.log(4444);
链式有人答了,我贡献一个函数式的吧
let f = n => (k => n > 1 ? (k(n), f(n - 1), k(n)) : k(n))(n => console.log((n + "").repeat(n)));
f(4);
来个es6
var arr = []
// 生成倒序的
for (let i = 5; i > 0; i--) {
arr.push((i+'').repeat(i))
}
// 删除最小的,然后再倒序,在拼接
arr.push(...arr.slice(0, -1).reverse())
function add(num){
var arr=Array.from({length:num},(item,index)=>(index+1+'').repeat(index+1));
arr.unshift(...arr.slice(1).reverse());
return arr;
}
console.log(add(4));
const size = 4;
// 生成一个长度为 size 的空数组
new Array(size)
// 使用空字符填充
.fill('')
// 对数组进行映射
.map((i, index) =>
// 这里是个闭包,参数为一个用 `size - index` 填充的长度为 [size - index]的数组
// 将数组打印出来并抛出
(arr => {return console.log(arr), arr})
(new Array(size - index).fill(size - index).join('')))
// 此时 arr = ['4444', '333', '22', '1']
// 把 `1` 扔掉
.filter(i => i.length !== 1)
// 倒叙
.reverse()
// 输出
.forEach(i => console.log(i))
const t = num => {
let v = num;
flag = -1;
const result = [];
do {
result.push(new Array(v).fill(v).join(''));
if (v === 1) {
flag = -flag;
}
v += flag;
} while(v <= num)
return result.join('\n');
}
console.log(t(1));
console.log(t(2));
console.log(t(3));
console.log(t(4));
console.log(t(5));
1
22
1
22
333
22
1
22
333
4444
333
22
1
22
333
4444
55555
4444
333
22
1
22
333
4444
55555
来写一个函数式的实现。
let _ = require('lodash')
function repeat (value) {
return _.map(_.range(value), () => value)
}
// 最后
console.log(repeat(4).join(''))
console.log(repeat(3).join(''))
console.log(repeat(2).join(''))
console.log(repeat(1).join(''))
console.log(repeat(2).join(''))
console.log(repeat(3).join(''))
console.log(repeat(4).join(''))
哈哈哈
闲。。
首先根据num的初始化一个数组,长度为num*2-1,填充0,不然没法遍历。然后初始化数组为4,3,2,1,2,3,4
的形式,然后填充字符
(num=>new Array(num*2-1).fill(0).map((e,i)=>i<num?num-i:(i-num+2)).map(e=>"".padStart(e,e)).join("\n"))(4)
function tree(n){
for(var i=n;i>0;i--){
var str = '';
for(var j=0;j<i;j++){
str += i;
}
console.log(str);
}
for(var k=2;k<n+1;k++){
var str2 = '';
for(var l=0;l<k;l++){
str2 += k;
}
console.log(str2);
}
}
const reverseTwoNumber = n => {
if(n <= 0) {
throw `n must a positive integer`
}
let array = new Array(2*n - 1)
for(let i = n; i > 0; i --) {
array[n - i] = i.toString().repeat(i);
if(i > 1) {
array[n + i - 1] = i.toString().repeat(i);
}
}
return array
}
那我精简一下,不知道是不是最少代码量。
let a = console.log;
a(4444);
a(333);
a(22);
a(1);
a(22);
a(333);
a(4444);
递归版
const size = 4;
const array = [];
function create(num, finalNum, sub) {
if(num == 1) {
array.push('*')
create(2, finalNum, false)
} else if(num == finalNum) {
array.push(new Array(finalNum).fill('*').join(''))
sub && create(finalNum - 1, finalNum, sub)
} else {
array.push(new Array(num).fill('*').join(''))
create(sub ? num - 1 : num + 1, finalNum, sub)
}
}
create(size, size, true);
array.forEach(function(value) {
console.log(value)
})
最简单的递归方法
(function(n) {
for(let i = n; i > 0; i--){
for(var j = 0; j < i; j++)
document.write(i + ' ')
document.write('<br/>');
}
for(let i = 2; i < n+1; i++){
for(let j = 0; j < i; j++)
document.write(i + ' ')
document.write('<br/>');
}
})(4);
let map = []; // map= [4][4] js会报错 哎 js自身天生就是残疾
let num = 4;
// 声明二维数组 真是操蛋
for(let row = 0; row < num * 2 - 1; row++) {
map.push([]);
for(let col = 0; col < num; col++) {
map[row].push('');
}
}
for(let row = 0; row < num; row++) {
let currRow = num - row - 1;
// 从中间开始对称打印 对称的两行 相加 == num * 2 - 2
for(let col = 0; col < row + 1; col++) {
map[currRow][col] = row + 1;
map[num * 2 - 2 - currRow][col] = row + 1;
}
}
console.log(map);
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决