编程练习

多维数组转一维数组

1
2
var arr = [1,[[4,5,6],2,[[[7,8,9]]],3]];
arr = arr.toString().split(",").map(v=>Number(v));

递归算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var arr = [1,[[4,5,6],2,[[[7,8,9]]],3]];
var newArr = [];

function exe(_arr){
_arr.forEach((v,i)=>{
if(Array.isArray(v)){
exe(v);
}else{
newArr.push(v);
}
})
}

exe(arr);

求和且查询下标

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

1
2
3
4
5
6
7
8
9
10
11
12
13
var twoSum = function (nums, target) {
var cloneNums = nums.map(function (v) { return v; });
var indexs = [];
nums.forEach(function (v, i) {
cloneNums.forEach(function (_v, _i) {
if (_v + v === target && i !== _i) {
indexs = [i, _i];
}
});
});
return indexs;
};
twoSum([3, 3], 6);

千分表示法

1
2
3
4
5
6
7
8
9
10
11
12
var num = 9123123456789.9;
var numFloot = num.toString().match(/\.\d+/)[0];
var intNum:number = Math.floor(num);
var intNumStr:string = intNum.toString();
var reverseStr:string = intNumStr.split("").reverse().join("");
reverseStr = reverseStr.match(/\d{3}/g).map(v=>v+",").join("");
if(intNumStr.length%3!==0){
reverseStr+=intNumStr[0];
}
var newStr:string|number = reverseStr.split("").reverse().join("") + numFloot;
newStr = newStr.replace(/^,/,"");
console.log(newStr);

查询url地址的查询语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Param {
constructor(key, value) {
this.key = key;
this.value = value;
}
}
var result = [];
var main = function (str) {
let search = str.match(/\?.+/)[0];
search = search.replace(/\?/, "");
let searchs = search.split("&");
searchs.forEach(v => {
let _arr = v.split("=");
result.push(new Param(_arr[0], _arr[1]));
});
return result;
};
var str = 'http://s.weibo.com/weibo/Aralic?topnav=1&wvr=6&name=jonny&age=34&id=3';
console.log(main(str));

返回契波那契数列的下标返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
*@desc: fibonacci
*@param: count {Number}
*@return: result {Number} 第count个fibonacci值,计数从0开始
fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]
则getNthFibonacci(0)返回值为1
则getNthFibonacci(4)返回值为5
*/
function getNthFibonacci(count) {
var fibonacci = [];
fibonacci[0] = 1;
fibonacci[1] = 1;
fibonacci[2] = 2;
if (count >= 2) {
for(let i = 3;i<=count;i++){
fibonacci[i%3] = fibonacci[(i - 1)%3] + fibonacci[(i - 2)%3];
}
}
return fibonacci[count%3];
}