美文网首页
练习代码(一)

练习代码(一)

作者: _Kantin | 来源:发表于2017-10-07 15:54 被阅读18次

(1)给定一个数组arr[]和欲在其中选中的数n,输出不同的选中顺序
(本题的高明之处在于下面的递归之处,一个数选中,则在剩下的选择n-1,否则的话则在剩下中选择n个)

public void combination(List<Integer> selected,List<Integer>data ,int n) {
        if(n==0) {
            for(Integer i :selected) {
                System.out.println(i);
                System.out.println(" ");
            }
            System.out.println(" ");
            return;
        }
        if(data.isEmpty()) return;
        
        selected.add(data.get(0));
        combination(selected,data.subList(1, data.size()),n-1);
        selected.remove(data.size()-1);
        combination(selected,data.subList(1, data.size()),n);
    }

(2)删除链表中的某一个数
(注意删除节点是头结点,还有头节点若删除为空的情况)

public Node deleteIfEquals(Node head ,int value) {
        //循环的判断头节点是否等于value,若一直等于,则为空
        while(head !=null && head.getValue()==value)
        {
            head=head.getNext();
        }
        //为空判断
        if(head==null)  return null;
        Node prev = head;
        while(prev.getNext()!=null) {
            if(prev.getNext().getValue()==value) {
                prev.setNext(prev.getNext().getNext());
            }else {
                prev=prev.getNext();
            }
        }
        return head;
    }

(3)通过递归和非递归的方法反转一个链表

public Node createLinkedList(List<Integer> data) {
        if(data.isEmpty()) {
            return null;
        }
        Node firstnode = new Node(data.get(0));
        Node headOfSubList =createLinkedList(data.subList(1, data.size()));
        firstnode.setNext(headOfSubList);
        return firstnode;
    }
    
    public Node reverLinkedList(Node head) {
        //特殊情况当node为空或者只有一个节点的时候
        if(head==null || head.getNext() ==null) {
            return null;
        }
        //最终将反转到最后一个node
        Node newNode = reverLinkedList(head.getNext());
        head.getNext().setNext(head);
        head.setNext(null);
        return newNode;
    }
    
    public Node reverseLiskedList(Node node) {
        //新的头节点
        Node newHead = null;
        //下一节点
        Node curHead = null;
        
        while(curHead!=null) {
            Node next = curHead.getNext(); //保存第三节点
            curHead.setNext(newHead);
            newHead=curHead;
            curHead=next;
        }
        return newHead;
    }

(4) 一个数的N进制转换
(把其中的i换成输入数字,2换成欲转换的进制即可)

public static void main(String[] args) {
        int i = 13;
        StringBuffer sb = new StringBuffer();
        while (i!=0) {
            int n = i%2;
            sb.append(n);
            i/=2;
        }
        System.out.println(Integer.parseInt(new String(sb)));
    }

(5)一个常用统计数组的方法

    public static void main(String[] args) {
        int a[] ={33,23,42,34,23,56,23,43,54,45,32,35};
        Map<Integer, Integer> map = new HashMap<>();
        for (int str : a) {
               Integer num = map.get(str);  
               map.put(str, num == null ? 1 : num + 1);
          }
         Set set = map.entrySet();
         Iterator it = set.iterator();
         while (it.hasNext()) {
                Map.Entry<Integer, Integer> entry =  (Entry<Integer, Integer>) it.next();
                System.out.println("key  " + entry.getKey() + "value : " + entry.getValue());
            }
    }

相关文章

网友评论

      本文标题:练习代码(一)

      本文链接:https://www.haomeiwen.com/subject/ihvjyxtx.html