剑指offer(五)
2015-11-07 09:43
274 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.打印1到最大的N位数(对N个位置0到9进行全排列)</span>
#include <iostream> #include<string> using namespace std; void p(string s,int n) { string s1; s1.resize(n+1); for (int i=0;i<n+1;i++) s1[i]='0'; if(s==s1) cout<<'0'<<' '; else { int i=0; while (s[i]=='0') i++; while(i<=n) { cout<<s[i]; i++; } cout<<' '; } } void pp(string s1,int n,int index) { if(index==n-1) { p(s1, n); return; } for(int i=0;i<10;i++) { s1[index+1]=i+'0'; pp(s1,n,index+1); } } void p0tomaxn(int n) { string s1; s1.resize(n+1); s1[0]='0'; for (int i=0;i<10;i++) { s1 =i+'0'; pp(s1,n,0); } } int main() { p0tomaxn(2); return 0; }
2.在O(1)时间里删除结点(调换结点的两个方式,值调换和指针调换)
<span style="font-size:18px;">#include <iostream> #include<list> using namespace std; void delete_list(list<int> &list1,list<int>::iterator ite) { if(ite==list1.begin()&&(ite++)==list1.end()) list1.clear();//只有一个结点 else if(ite==list1.end())//是尾结点 { ite--; list1.erase(ite); } else { int temp=*ite; ite--; *ite=temp; ite++; list1.erase(ite); } } int main() { int a[]={0,1,2,3,4,5}; list<int>list1(a,a+6); list<int>::iterator ite=list1.end()--; delete_list(list1,ite); return 0; } </span>还是用了list,思路还在吧。。
3.调整数组顺序使奇数位于偶数之前
<span style="font-size:18px;">#include <iostream> using namespace std; void reorder(int *a,int n) { int i=0,j=n-1; while (i<j) { if(a[i]%2==1) i++; if(a[j]%2==0) j--; if(a[i]%2==0&&a[j]%2==1) { swap(a[i],a[j]); i++; j--; } } } int main() { int a[]={0,1,2,3,4,5}; int len=sizeof(a)/sizeof(a[0]); reorder(a,len); return 0; }</span>
4.链表中倒数第K个数(遍历链表一次,设置两个节点指针)
#include <iostream>
using namespace std;
char state=0;//设置状态
struct List
{
int data;
List* next;
List(int num) :data(num),next(NULL){};
};
List* init_list(int *a,int n)
{
List *head=new List(a[0]);
List *q=head;
for (int i=1;i<n;i++)
{
List *p=new List(a[i]);
q->next=p;
q=p;
}
return head;
}void find_lastKth(List*head,int k)
{
if(k<=0||!head)
{
state=1;
return;
}
List *p,*q;
p=head,q=head;
int i=0;
for ( ;i<k-1&&p->next;i++) p=p->next;
while (p->next)
{
i++;
q=q->next;
p=p->next;
}
if(i<k-1)
{
state=1;
return;
}
cout<<q->data;
}
int main()
{
int a[]={0,1,2,3,4,5};
int len=sizeof(a)/sizeof(a[0]);
List *head=init_list(a,len);
find_lastKth(head,7);
return 0;
}
相关文章推荐
- 剑指offer(四)
- css input[type=file] 样式美化,input上传按钮美化
- js去除字符串的前后空格
- jquery之data
- Htmlparser 中的各种Filter介绍
- 基于HTML5的WebGL电信网管3D机房监控应用
- 基于HTML5的WebGL电信网管3D机房监控应用
- 图片旋转、无限滚动、文字跳动
- Why SIPfoundry decided to offer support
- 【JavaScript知识点二】JavaScript 变量
- 菜鸟日记之JSP1
- JavaScript的闭包特性 如何给循环中的对象添加事件
- CSS/LESS tips and snippets
- 关于jQuery UI样式不能应用问题的解决
- html横向树目录
- jquery的if语句
- jquery判断当前浏览器的实现代码
- web页面上显示当前系统时间
- 【JavaScript知识点一】JavaScript 数据类型
- jQuery插件开发精品教程(让你的jQuery更上一个台阶)