《剑指offer》学习心得第四日
2014-07-06 21:49
253 查看
一、打印从1到最大的N位数
两种方法:
1、用字符串模拟大数
2、递归(代码精简,面试时可以一用)
二、在O(1)时间内删除链表节点
注意事项:
1、对链表和删除节点为空的判断
2、要删除的是最后一个节点(不能和后面的节点进行交换,要用普通方法,遍历找上一个节点)
3、只有一个头节点
此外为了程序的鲁棒性还要验证要删除的节点是不是在链表中,这点面试时可以提出。
三、调整数组顺序使奇数位于偶数前面
思路:一个指向头的指针,一个指向尾的指针,头指针找到第一个偶数,为指针找到第一个奇数,然后交换,循环结束条件pBegin < pEnd
有这道题的启发是:奇数偶数的判断可以用函数指针来实现,这样便于算法的可扩充性。
四、全排列
两种方法:
1、用字符串模拟大数
2、递归(代码精简,面试时可以一用)
void print(char number[]) { int i=0; //找到第一个不为0的数 while (number[i] != '\0' && number[i] == '0') { i++; } //全都为0 什么都不输出 if (number[i] == '\0') return; //打印剩下的 while (number[i] != '\0') { printf("%c", number[i]); i++; } printf("\n"); } void print1tomaxn(char *number, int n, int index) { if (index == n) { print(number); return; } for (int i=0; i<10; ++i) { number[index] = '0' + i; print1tomaxn(number, n, index+1); } } int main() { int n=5; char *number = new char[n + 1]; number = '\0'; print1tomaxn(number, n, 0); return 0; }
二、在O(1)时间内删除链表节点
注意事项:
1、对链表和删除节点为空的判断
2、要删除的是最后一个节点(不能和后面的节点进行交换,要用普通方法,遍历找上一个节点)
3、只有一个头节点
此外为了程序的鲁棒性还要验证要删除的节点是不是在链表中,这点面试时可以提出。
三、调整数组顺序使奇数位于偶数前面
思路:一个指向头的指针,一个指向尾的指针,头指针找到第一个偶数,为指针找到第一个奇数,然后交换,循环结束条件pBegin < pEnd
有这道题的启发是:奇数偶数的判断可以用函数指针来实现,这样便于算法的可扩充性。
四、全排列
void permutation(char *pStr, char *pBegin) { if (*pBegin == '\0') { printf("%s\n", pStr); } else { for (char *pCh = pBegin; *pCh != '\0'; ++pCh) { char temp = *pCh; *pCh = *pBegin; *pBegin = temp; permutation(pStr, pBegin+1); temp = *pCh; *pCh = *pBegin; *pBegin = temp; } } } void permutation(char *pStr) { if (pStr == NULL) return; permutation(pStr, pStr); }
相关文章推荐
- 《剑指offer》学习心得第三日
- [剑指offer学习心得]之:二维数组中的查找
- 《剑指offer》学习心得第一日
- [剑指offer学习心得]之:最小的k个数
- [剑指offer学习心得]之:从上往下打印二叉树
- [剑指offer学习心得]之:替换空格
- [剑指offer学习心得]之:两个链表的第一个公共结点
- [剑指offer学习心得]之:反转链表
- [剑指offer学习心得]之:栈的压入、弹出序列
- [剑指offer学习心得]之:二叉树中和为某一值的路径
- [剑指offer学习心得]之:第一个只出现一次的字符
- [剑指offer学习心得]之:链表中倒数第k个结点
- [剑指offer学习心得]之:树的子结构
- [剑指offer学习心得]之:二叉搜索树的后序遍历序列
- [剑指offer学习心得]之:在O(1)时间删除链表结点
- [剑指offer学习心得]之:圆圈中最后剩下的数字
- 《剑指offer》学习心得第二日
- [剑指offer学习心得]之:从尾到头打印链表
- [剑指offer学习心得]之:重建二叉树
- [剑指offer学习心得]之:二叉树的深度