您的位置:首页 > Web前端 > JavaScript

javascript 剑指offer

2017-03-31 11:04 176 查看
第二题:替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
function replaceSpace(str)
{
return str.replace(/ /g,"%20");
}
module.exports = {
replaceSpace : replaceSpace
};

第三题:从头到尾打印链表
输入一个链表,从尾到头打印链表每个节点的值。
function ListNode(x){
this.val = x;
this.next = null;
}
function printListFromTailToHead(head)
{
var arr=[];
while(head!=null){
arr.unshift(head.val);
head=head.next;
}
return arr;
}
module.exports = {
printListFromTailToHead : printListFromTailToHead
};
第四题:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
}
function reConstructBinaryTree(pre, vin)
{

if(pre.length == 0){       
return null;    

}     
var root = 0,     //保存中序的根节点序号
pre_left = [], //保存前序左子树
pre_right = [], //保存前序右子树
vin_left = [], //保存中序左子树
vin_right = [],         //保存中序右子树
head = new TreeNode(pre[0]);     //前序的第一个数肯定是根节点
for(var i = 0; i < vin.length; i++){ //找到中序的根节点    
if(vin[i] === pre[0]){            
root = i;            
break;        
}    
}    
for(var j = 0; j < root; j++){         //将前序和中序序列以根节点进行分割
pre_left.push(pre[j+1]);        
vin_left.push(vin[j]);    
}    
for(var k = root + 1; k < vin.length; k++){        
pre_right.push(pre[k]);        
vin_right.push(vin[k]);    
}        
head.left = reConstructBinaryTree(pre_left, vin_left);    
head.right = reConstructBinaryTree(pre_right, vin_right);         
return head;
}
module.exports = {
reConstructBinaryTree : reConstructBinaryTree
};

第五题:用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
function push(node)
{
return Array.prototype.push.call(this,node);
}
function pop()
{
return Array.prototype.shift.call(this);
}
module.exports = {
push : push,
pop : pop
};
第六题:旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
function minNumberInRotateArray(rotateArray)
{
var mid=0,low=0,high=rotateArray.length;
if(rotateArray.length==0){
return 0;
}else{
for(var i=0;i<rotateArray.length;i++){
if(rotateArray[i+1]<rotateArray[i]){
return rotateArray[i+1];
}
}
}
}
module.exports = {
minNumberInRotateArray : minNumberInRotateArray
};
第七题:斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
function Fibonacci(n)
{
var pre=0,next=1,result=0;
if(n==0 || n==1){
return n;
}
for(var i=1;i<n;i++){
result=pre+next;
pre=next;
next=result;
}
return result;
}
module.exports = {
Fibonacci : Fibonacci
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: