一个旅游网站建设无锡整站百度快照优化
可能因为自己代码写的少的缘故吧,我做算法题的时候,经常会往复杂层面上考虑,比如标题上的这个问题“Javascript打印出1-10000之间的所有对称数【2012 百度】”,最开始我就绕了好几个弯。
方案一:(firefox:28ms chrome:3ms)
由内到外比对法。这是最初自己想到的方案,很二的感觉。。。从数字的位数中间向两边比对,碰到不相同的数字返回false,否则返回true,这个要考虑奇位对称数和偶位对称数的不同情况,当数字为奇位对称数的时候,首先要删除掉中间可能成为对称轴数的数字,然后再比对。
var isSymmetry = function(num){vari,l,m,n;
aSingleNumber= num.toString().split("");
l=aSingleNumber.length;if (l >= 2){if (l%2 === 1){//如果数字为奇数个数,删除掉中间的那个可能成为对称轴的数字
aSingleNumber.splice(Math.floor(l/2),1);
}for (m = aSingleNumber.length/2 -1,n = m + 1;m >= 0,n < aSingleNumber.length; m--,n++){//数字从中间向两边比对,碰到不相等则返回false
if (aSingleNumber[m] !==aSingleNumber[n]){return false;
}
}return true;
}
}
方案二(推荐):(firefox:25ms chrome:2ms)
由外到内比对法。注意把小于10(即程序中的 l<2)的数字排除掉。
var isSymmetry = function(num) {var sNum =num.toString();for (var i = 0,l = sNum.length; i < l / 2 ; i++) {if (sNum.charAt(i) !== sNum.charAt(l - 1 - i) || l < 2) {return false;
}
}return true;
}
方案三:(firefox:37ms chrome:10ms)
逆序相等比对法。我想这个答案才是面试人员真正想要的答案吧,因为只有这个才能体现对称数的本质:一个数的逆序数等于自身。但执行效率上慢了许多,猜想可能是逆序数转化用到的函数过多的原因吧,有看明白为什么慢的朋友还请不吝赐教!
var isSymmetry = function(num) {
nInversionNumber= +(num.toString().split("").reverse().join(""));if (num === nInversionNumber && num >= 10){return true;
}return false;
}
方案四:(firefox:24.7ms chrome:8ms)
逆序相等字符比对法。原理同方案三,代码的不同之处在于,判断相等的时候用的是字符串比较,性能上比方案三有所提高。
var isSymmetry = function(num) {var sInversionNumber ="",
sNum= num + "";for (i = sNum.length; i >= 0 ; i--){
sInversionNumber+=sNum.charAt(i);
}if (sNum === sInversionNumber && num >= 10){return true;
}return false;
}
下面是调用测试:
var aSymmetryNumbers = function(a,b){var result =[];for (var i = a; i < b; i++){if(isSymmetry(i)){
result.push(i);
}
}returnresult;
}//test
var foo = document.getElementById("foo");var bar = document.getElementById("bar");
foo.οnclick= function() {
bar.innerHTML= aSymmetryNumbers(0,10000);
}
按钮