第一题 打印从 1 到最大的 n 位数
输入数字 n,按顺序打印出从 1 最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。
为了避免溢出,要使用字符串
参考https://blog.csdn.net/u014730658/article/details/52261710的全排列方法
假设n=2,那就打印的是01 02 03 04....10,11...99,不打印开头的0.以n=2为例说明,先设置StringBuffer[2],在方法printMax中先设置s[0]=i,接着设置s[1]=j,即此时s='i''j',那么可以打印此时的s,如果i=0不打印,否则先打印i,再打印j,最后打印空格。其中prints的作用就是打印一个char字符。比如12,循环是用来按照索引挨个打印,不要想复杂了,可以使用如下代码做个测试;
StringBuffer s2=new StringBuffer("10");
prints(s2);
--结果是10
public static void printMax(int n) {
if(n<0) return;
StringBuffer s = new StringBuffer(n);
for(int i=0;i<n;i++) {
s.append('0');
}
for(int i = 0; i < 10; i++){
s.setCharAt(0, (char) (i+'0'));
printnum(s, n, 0);
}
}
public static void printnum(StringBuffer s,int n,int index) {
if(index==n-1) {
prints(s);
return;
}
for(int i=0;i<10;i++) {
s.setCharAt(index+1, (char) (i+'0'));
printnum(s,n,index+1);
}
}
public static void prints(StringBuffer s) {
boolean isBeginning0 = true;
for(int i = 0; i < s.length(); i++){
if(isBeginning0 && s.charAt(i) != '0'){
isBeginning0 = false;
}
if(!isBeginning0){
System.out.print(s.charAt(i));
}
}
System.out.println();
}
第二题 删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
publicListNodedeleteDuplication(ListNodepHead) {if(pHead==null||pHead.next==null)returnpHead;ListNodenext=pHead.next;if(pHead.val==next.val) {while(next!=null&&pHead.val==next.val) next=next.next;returndeleteDuplication(next); }else{ pHead.next=deleteDuplication(pHead.next);returnpHead; }}