![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
经典面试题
文章平均质量分 54
剑蝶ly
这个作者很懒,什么都没留下…
展开
-
打印1到最大的n位数
题目:输入数字n,按顺序打印从1到最大的n位十进制数,比如输入3,就打印从1到999. 分析:首先不可能定义int型的数,当输入的n稍微大一点就溢出了,所以一般要考虑用字符串模拟数字的解法。我们一共用了三个函数,第一个函数print用来打印某一个数字,Increment用来自增,但是要加上防溢出的机制,printMaxDigit是实现函数。总的代码如下:#include#include原创 2015-04-14 18:50:04 · 574 阅读 · 0 评论 -
删除链表中的重复节点
这里的删除是只要有重复就要全部删除,如1->2->2->3,删除之后就是1->3.#include#includestruct ListNode { int val; struct ListNode *next;};struct ListNode* deleteDuplicates(struct ListNode* head) { if(NULL==he原创 2015-06-28 16:15:06 · 1115 阅读 · 0 评论 -
反转链表-C语言实现
题目要求:在O(n)的时间内反转链表,并返回反转后链表的头指针。分析:求解链表问题首先一定要考虑非空问题,而且要注意终止的位置。 如图所示,反转的时候定义三个节点,pCur代表当前节点、pNext代表指向的下一个节点、pPre代表前一个节点。有了这三个节点就可以从前往后遍历,而且保证链表不会断原创 2015-05-19 14:34:37 · 1776 阅读 · 0 评论 -
判断是否是有效的IP地址
#include#includebool isValidIp(char *s){ int len=strlen(s); int i=0; if(len<7) return false; for(i=0;i<len;i++) { if(('0'<=s[i]&&s[i]<='9')||(s[i]=='.')) continue; else return fal原创 2015-06-24 20:00:26 · 2289 阅读 · 0 评论 -
查看两个int数的二进制有几位不同
题目:查看两个int(32位)数的二进制有几位不同。 分析:要理解该题目的意思,就要明白C语言中关于位的一些操作符。 1)“&",按位与操作符,从低位到高位对两个数的每位进行与操作,如1001&1101=1001,都为1则取1; 2)"|",按位或操作符,有一个是1就取1; 3)"^",异或,不同则取1; 4)"~",非操作符,用来对一个二进制数按原创 2015-04-25 14:39:34 · 1303 阅读 · 0 评论 -
C语言 全排列
#include#include#includevoid swap(int *a,int *b){ int tmp; tmp=*a; *a=*b; *b=tmp;}void permutation(int nums[],int i,int n){ int j=0; if(i==n) { for(j=0;j<n;j++) printf("%d ",nums[原创 2015-06-03 16:17:37 · 773 阅读 · 0 评论 -
leetcode第136题-Single Number
题目要求:给出一个数组,只有一个数字出现一次,其他的都出现两次,找出那出现一次的数字,要求用线性的时间解出题目!分析:因为题目要求的是用线性时间,所以类似于那种暴力解决的方法会超时,如下面这种:int singleNumber2(int *nums,int n){ int i,j; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(nu原创 2015-06-02 16:07:34 · 664 阅读 · 0 评论 -
用链表实现两个数相加
说明:使用链表实现两个数的和,数的高位存储在链表的头部,最后输出结果。注:使用了翻转链表的功能。#include#includestruct Node{ int value; Node *next;};Node *reverseList(Node *head){ Node *pCur=head; Node *pPre=NULL; Node *rHead=NULL; wh原创 2015-06-16 19:43:22 · 794 阅读 · 0 评论 -
调整数组使奇数位于偶数前面
如果考虑暴力解决的话,就每次从前往后扫面,遇到偶数就放在最后,这样时间复杂度就是O(n*n),对于这种问题明显过高了,我们考虑扫描一遍,用两个指针,一个从前往后,另一个从后往前,碰到前偶后奇的时候就交换,这样算法复杂度只有O(n)。#include#includevoid reset(int a[],int n){ int i=0,j=n-1,tmp=0; while(i<j) {原创 2015-05-05 20:03:55 · 577 阅读 · 0 评论 -
顺时针打印矩阵(C语言代码)
#include#includevoid printMatrix(int **matrix,int columns,int rows,int start){ int x=columns-start-1; int y=rows-start-1; int i; for(i=start;i<=x;i++)//先打印一行 printf("%d ",matrix[start][i]);原创 2015-05-26 10:27:31 · 4180 阅读 · 0 评论