腾讯公司技术面试题及答案.docxVIP

  • 0
  • 0
  • 约7.47千字
  • 约 24页
  • 2026-01-28 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年腾讯公司技术面试题及答案

一、编程基础(共5题,每题10分,总分50分)

1.题目:

请实现一个函数,输入一个正整数`n`,返回`n`的阶乘。要求不使用递归,且考虑大数问题。

答案:

cpp

includeiostream

includevector

usingnamespacestd;

vectorintmultiply(intn){

vectorintresult(1,1);//初始化结果为1

for(inti=2;i=n;++i){

intcarry=0;

for(intj=0;jresult.size();++j){

intproduct=result[j]i+carry;

result[j]=product%10;//存储当前位

carry=product/10;//计算进位

}

//处理剩余的进位

while(carry0){

result.push_back(carry%10);

carry/=10;

}

}

//反转结果,因为是从低位到高位计算的

reverse(result.begin(),result.end());

returnresult;

}

intmain(){

intn;

cinn;

vectorintfactorial=multiply(n);

for(intdigit:factorial){

coutdigit;

}

return0;

}

解析:

-使用`vectorint`存储每一位的数字,避免整数溢出。

-从`2`到`n`逐个乘,并处理进位。

-反转结果是因为计算顺序是从低位到高位。

2.题目:

给定一个字符串`s`,请判断它是否是一个有效的括号字符串(只包含`(`和`)`),且左右括号能正确匹配。

答案:

cpp

includeiostream

includestack

usingnamespacestd;

boolisValidParentheses(strings){

stackcharst;

for(charc:s){

if(c==(){

st.push(c);

}elseif(c==)){

if(st.empty())returnfalse;//没有匹配的左括号

st.pop();

}else{

returnfalse;//包含非法字符

}

}

returnst.empty();//所有左括号都已匹配

}

intmain(){

strings;

cins;

if(isValidParentheses(s)){

cout有效;

}else{

cout无效;

}

return0;

}

解析:

-使用栈结构,遇到`(`压入,遇到`)`弹出。

-如果栈为空时遇到`)`或包含非法字符,则无效。

-最后栈为空则匹配成功。

3.题目:

请实现一个快速排序算法,对数组`arr`进行排序。

答案:

cpp

includeiostream

includevector

usingnamespacestd;

voidquickSort(vectorintarr,intleft,intright){

if(left=right)return;

intpivot=arr[(left+right)/2];

inti=left,j=right;

while(i=j){

while(arr[i]pivot)i++;

while(arr[j]pivot)j--;

if(i=j){

swap(arr[i],arr[j]);

i++;

j--;

}

}

quickSort(arr,left,j);

quickSort(arr,i,right);

}

intmain(){

vectorintarr={3,1,4,1,5,9,2,6,5};

quickSort(arr,0,arr.size()-1);

for(intnum:arr){

coutnum;

}

return0;

}

解析:

-选择中间值作为基准(pivot),分区排序。

-递归对左右子数组进行排序。

4.题目:

请实现一个函数,输入一个链表的头节点`head`,返回其反转后的头节点。

答案:

cpp

includeiostream

usingnames

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档