算法复杂度为O(2n)
function fibonacci(n) {
return n < 2 ? n : fibonacci(n-1) + fibonacci(n-2);
}
function maxInArray(arr) {
return Math.max.apply(Math, arr);
}
String.prototype.reverse = function() {
return this.split('').reverse().join('');
}
or
String.prototype.reverse = function() {
var str = '';
var len = this.length;
while (len>0) {
str += this.substring(len-1, len);
len--;
}
return str;
}
注: 在类似'foo 𝌆 bar'这种astral symbol,将展示异。
可以使用 Esrever 来处理这种特殊字符的反转。
上代码:
function reverseDom(el){
var frag = document.createDocumentFragment();
while(el.lastChild){
frag.appendChild(el.lastChild);
}
el.appendChild(frag);
}
注:这里采用的是原生的DOM操作,
采用documentFragment的形式形成一个缓存区,
再采用appendChild,appendChild有个特点:如果被插入的节点已经存在于当前文档的DOM树中,则那个节点会首先从原先的位置移除,然后再插入到新的位置。
利用这个特点可以去除原先位置的节点,再插入新的排序后的节点。
注:需问清楚是否关注字母大小写与空格问题。
function removeDuplicateChar(str){
var strArr = str.split('');
var targetArr = [];
strArr.forEach(function(item){
if (strArr.indexOf(item) === strArr.lastIndexOf(item)) {
targetArr.push(item)
}
})
// 去除空格,区分大小写
return targetArr.join('').split(' ').join('');
}
回文:从左到右跟从右到左是一样的。
Bulid-in Method 内置方法
function isPalindrom(str) {
return str === str.split('').reverse().join('');
}
原生方法:
function isPalindrome(str){
var i, len = str.length;
// 前一半与后一半进行对比,如果有不同的就不是
for(i =0; i<len/2; i++){
if (str[i]!== str[len -1 -i])
return false;
}
return true;
}
从0 开始到n总共多少个“什么数字”(0,1,2...)
如从0到2015有多少个0:
function countNumber(n){
// 包括0,即单位数都算
var count = 1;
while(n>0){
count += Math.floor(n/10);
n = n/10;
}
return count;
}
穷举一个数组中各个元素的排列
策略
减而治之、递归
/**
* Created by cshao on 12/23/14.
*/
function getPermutation(arr) {
if (arr.length == 1) {
return [arr];
}
var permutation = [];
for (var i=0; i<arr.length; i++) {
var firstEle = arr[i];
var arrClone = arr.slice(0);
arrClone.splice(i, 1);
var childPermutation = getPermutation(arrClone);
for (var j=0; j<childPermutation.length; j++) {
childPermutation[j].unshift(firstEle);
}
permutation = permutation.concat(childPermutation);
}
return permutation;
}
var permutation = getPermutation(['a','b','c']);
console.dir(permutation);