java日记2018-05-01

第一题 打印从 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; }}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一间房 四张床 四个角落明亮亮
    谦花成都阅读 199评论 0 4
  • 补20180411共修功课第十天:觉察自己目前婚姻中存在的问题,调整动机,为自己未来婚姻设定一个清晰而美好的目标。...
    豆豆妈妈_68cd阅读 128评论 0 3
  • 文 | 叶先生的鱼 本文由【区块链研习社】优质内容计划支持,更多关于区块链的深度好文,请点击【区块链研习社】 1....
    叶先生的鱼阅读 750评论 0 1