盈江城乡建设局网站,中山工商注册公司,最新网页制作资料,百度seo公司可能因为自己代码写的少的缘故吧#xff0c;我做算法题的时候#xff0c;经常会往复杂层面上考虑#xff0c;比如标题上的这个问题“Javascript打印出1-10000之间的所有对称数【2012 百度】”#xff0c;最开始我就绕了好几个弯。 方案一#xff1a;(firefox:28ms chrome:… 可能因为自己代码写的少的缘故吧我做算法题的时候经常会往复杂层面上考虑比如标题上的这个问题“Javascript打印出1-10000之间的所有对称数【2012 百度】”最开始我就绕了好几个弯。 方案一(firefox:28ms chrome:3ms) 由内到外比对法。这是最初自己想到的方案很二的感觉。。。从数字的位数中间向两边比对碰到不相同的数字返回false否则返回true这个要考虑奇位对称数和偶位对称数的不同情况当数字为奇位对称数的时候首先要删除掉中间可能成为对称轴数的数字然后再比对。 var isSymmetry function(num){vari,l,m,n; aSingleNumber num.toString().split(); laSingleNumber.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(即程序中的 l2)的数字排除掉。 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--){ sInversionNumbersNum.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); } 按钮