刷题记录(1)

刷题记录

入门

1. 输入处理(重要):HJ5 进制转换

在这里插入图片描述

	public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine().replaceAll("0[xX]","");
        System.out.print(Integer.parseInt(str,16));
    }
2. 排列组合:(牛客搜索)NC61.两数之和

在这里插入图片描述
暴力解法:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for(int i = 0;i<nums.length-1; i++){
            for(int j = i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    return new int[]{i, j};  
                }
            }
        }
        return null;
    }

}

改进:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i<nums.length; i++){
            int val = target-nums[i];
            if(map.containsKey(val)){
                return new int[]{i,map.get(val)};
            }
            map.put(nums[i],i);
        }
        return null;
    }

}
3. 快速排序:HJ3.明明的随机数

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        in.nextInt();
        Set<Integer> numbers = new TreeSet<>(); 
        while (in.hasNextInt()){
            numbers.add(in.nextInt());
        }
        for(Integer num : numbers){
            System.out.println(num);        }
        
    }
}
4. 哈希表:HJ10.字符个数统计

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        Set<Character> set = new HashSet<>();
        for(int i = 0;i<str.length();i++){
            char s = str.charAt(i);
            if(s<=0 || s>= 127 || s == '\n'){
                continue;
            }
            set.add(s); 
        }
        System.out.print(set.size());
    }
}
5. 递归:NC68.跳台阶

在这里插入图片描述

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param number int整型 
     * @return int整型
     */
    public int jumpFloor (int number) {
        // write code here
        if(number <= 1){
            return 1;
        }
        return jumpFloor(number-1) + jumpFloor(number-2);
    }
}

字符串操作

1. HJ17.坐标移动

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] strs = in.nextLine().split(";");
        Set<String> set = new HashSet<>();
        set.add("A");
        set.add("S");
        set.add("W");
        set.add("D");
        int resultX = 0;
        int resultY = 0;
        for (String str : strs) {
            if (str.length() < 2) {
                continue;
            }
            String direction = str.substring(0, 1);
            String num = str.substring(1);
            if (str.length() > 1 && str.length() <= 3 && set.contains(direction) &&
                    num.matches("\\d+")) {
                switch (direction) {
                    case "A":
                        resultX -= Integer.parseInt(num);
                        break;
                    case "D":
                        resultX += Integer.parseInt(num);
                        break;
                    case "W":
                        resultY += Integer.parseInt(num);
                        break;
                    case "S":
                        resultY -= Integer.parseInt(num);
                        break;
                }
            }
        }
        System.out.print(Integer.toString(resultX) + "," + Integer.toString(resultY));
    }
}

改进:

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] strs = in.nextLine().split(";");
        int resultX = 0;
        int resultY = 0;
        for (String str : strs) {
            if (str.length() < 2 || str.length() > 3  || !str.matches("^[AWSD]\\d+$")) {
                continue;
            }
            char direction = str.charAt(0);
            int num = Integer.parseInt(str.substring(1));

            switch (direction) {
                case 'A':
                    resultX -= num;
                    break;
                case 'D':
                    resultX += num;
                    break;
                case 'W':
                    resultY += num;
                    break;
                case 'S':
                    resultY -= num;
                    break;
            }

        }
        System.out.print(Integer.toString(resultX) + "," + Integer.toString(resultY));
    }
}
2. HJ20.密码验证合格程序

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Boolean flag = false;
        while (in.hasNext()) {
            String str = in.nextLine();
            if (str.length() > 8) {
                Set<Integer> set = new HashSet<>();
                for (int i = 0 ; i < str.length(); i++) {
                    char s = str.charAt(i);
                    if (Character.isDigit(s)) {
                        set.add(1);
                    } else if (Character.isUpperCase(s)) {
                        set.add(2);
                    } else if (Character.isLowerCase(s)) {
                        set.add(3);
                    } else if (!Character.isLetterOrDigit(s)) {
                        set.add(4);
                    }
                }
                if (set.size() > 2) {
                    flag = verify(str);
                }

            }
            String result = flag ? "OK" : "NG";
            System.out.println(result);
        }
    }
    public static boolean verify(String str) {
        
        for (int i = 0 ; i < str.length() - 3; i++) {
            String sonStr = str.substring(i, i + 3);
            int count = 0;
            for (int j = i ; j < str.length() - 3; j++) {
                
                String otherStr = str.substring(j, j + 3);  
                if (sonStr.equals(otherStr)) {  
                    count++;
                }  
            }
            if(count >1 ){
                return false;
            }
        }
        return true;
    }
}
3. HJ23.删除字符串中出现次数最少的字符

在这里插入图片描述

import java.util.*;
import java.util.stream.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str  = in.next();
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            Character item = str.charAt(i);
            map.put(item, map.getOrDefault(item, 0) + 1);
        };
        List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
        list.sort(Map.Entry.comparingByValue());
        Integer minCount = list.get(0).getValue();
        Set<Character> toRemove = list.stream().filter(data -> data.getValue() ==
                                  minCount).map(Map.Entry::getKey).collect(Collectors.toSet());
        for(Character c : toRemove){
            str = str.replaceAll(c.toString(),"");
        }
        System.out.print(str);
    }
}
4. HJ33.整数与IP地址间的转换

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        StringBuilder sb ;
        String numTwo;
        StringBuilder numTwoResult = new StringBuilder();
        while (in.hasNext()){
            list.add(in.next());
        }

        for(String ipStr : list.get(0).split("\\.")){
            numTwo = Integer.toBinaryString(Integer.parseInt(ipStr));
            sb = new StringBuilder(numTwo);
            while(sb.length()<8){
                sb.insert(0,'0');
            }
            numTwoResult.append(sb);
            
        }
        
       System.out.println(toTen(numTwoResult.toString()));
       
       StringBuilder tenToTwoSb =  new StringBuilder(Long.toBinaryString(Long.parseLong(list.get(1))));
       while(tenToTwoSb.length()<32){
            tenToTwoSb.insert(0,'0');
       }
       StringBuilder numTenResult = new StringBuilder();
       for(int i = 0;i<tenToTwoSb.length();i+=8){
           
            numTenResult.append(toTen(tenToTwoSb.substring(i,i+8))+".");
       }
       System.out.println(numTenResult.substring(0,numTenResult.length()-1));
        

    }
    public static String toTen(String numTwoResult){
        Long result = 0L ;
        Long base =1L;
        for(int i = numTwoResult.length()-1;i>=0;i--){
            if(numTwoResult.charAt(i) == '1'){
                result += base;
            }
            base *= 2;
        }

        return String.valueOf(result);
    }
}

注意使用long,int会超出范围

5. HJ101.输入整型数组和排序标识

在这里插入图片描述

import java.util.*;
import java.util.stream.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        while (in.hasNext()) {
            list.add(in.nextLine());
        }
        List<String> numList =  Arrays.asList(list.get(1).split(" "));
        if (list.get(2).equals("0")) {
            Collections.sort(numList, (a, b)->Integer.compare(Integer.parseInt(a),
                             Integer.parseInt(b)));
        } else {
            Collections.sort(numList, (a, b)->Integer.compare(Integer.parseInt(b),
                             Integer.parseInt(a)));
        }

        System.out.print(String.join(" ", numList)) ;
    }
}

改进:直接用数组

import java.util.*;
import java.util.stream.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int length = in.nextInt();
        int[] arr = new int[length];
        for(int i = 0; i<length;i++){
            arr[i] = in.nextInt();
        }
        Arrays.sort(arr);
        if(in.nextInt()==0){
            for(int i=0;i<length;i++){
                System.out.print(arr[i]+" ");
            }
        }else{
            for(int i=length-1;i>=0;i--){
                System.out.print(arr[i]+" ");
            }
        }
    }
}
6. HJ106.字符串逆序

在这里插入图片描述
···java
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
for(int i = str.length()-1;i>=0;i–){
System.out.print(str.charAt(i));
}
}
}
···
其它:

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        StringBuilder str = new StringBuilder(in.nextLine());
        System.out.print(str.reverse());
        
    }
}

排序

1. HJ8.合并表记录

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Map<Integer,Integer> map = new TreeMap<>();
        int length = Integer.parseInt( in.nextLine());
        for(int i = 0 ; i< length;i++){
            String[] str = in.nextLine().split(" ");
            int key = Integer.parseInt(str[0]);
            int value = Integer.parseInt(str[1]);
            if(map.containsKey(key)){
                value += map.get(key);
            }
            map.put(key,value);
        }
        for(Map.Entry<Integer,Integer> item : map.entrySet()){
             System.out.println(item.getKey() + " " + item.getValue());
        }
       
    }
}
2. HJ14.字符串排序

在这里插入图片描述

import java.util.*;
import java.util.stream.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int length = Integer.parseInt( in.nextLine());
        List<String> list = new ArrayList<>();
        while(in.hasNextLine()){
            list.add(in.nextLine());
        }
        Collections.sort(list);
        for(String str : list){
             System.out.println(str);
        }
       
    }
}
3. HJ27.查找兄弟单词

在这里插入图片描述

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<String> list = Arrays.asList(in.nextLine().split(" "));
        int length = Integer.parseInt(list.get(0));
        String base = list.get(list.size() - 2);
        char[] newBase =  base.toCharArray();
        Arrays.sort(newBase);
        int baseLength = base.length();
        int k = Integer.parseInt(list.get(list.size() - 1));

        List<String> broList = new ArrayList<>();
        for (int j = 1; j < list.size() - 2; j++) {
            boolean flag = true;
            if (list.get(j).length() != baseLength || list.get(j).equals(base)) {
                flag = false;
                continue;
            } else {
                char[] newStr = list.get(j).toCharArray();
                Arrays.sort(newStr);
                if (!String.valueOf(newStr).equals(String.valueOf(newBase))) {
                    flag = false;
                    continue;
                }
            }
            for (int i = 0; i < base.length(); i++) {
                if (!list.get(j).contains(String.valueOf( base.charAt(i)))) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                broList.add(list.get(j));
            }
        }
        System.out.println(broList.size());
        Collections.sort(broList);
        if (broList != null && broList.size()>=k) {
            System.out.println(broList.get(k - 1));
        }
    }
}

4. NC37.合并区间

在这里插入图片描述

import java.util.*;

/*
 * public class Interval {
 *   int start;
 *   int end;
 *   public Interval(int start, int end) {
 *     this.start = start;
 *     this.end = end;
 *   }
 * }
 */


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param intervals Interval类ArrayList
     * @return Interval类ArrayList
     */
    public int min = 0;
    public int max = 0;
    public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
        // write code here
        if(intervals==null || intervals.isEmpty() || intervals.size()==1){
            return intervals;
        }

        Collections.sort(intervals,(a,b)->(Integer.compare(a.start,b.start)));

        ArrayList<Interval> list = new ArrayList<>();   

        for (int i = 0; i < intervals.size(); i ++) {
           Interval current = intervals.get(i);
           
           if(list.isEmpty()||current.start>list.get(list.size()-1).end){
                list.add(current);        
           }else{
                list.get(list.size()-1).end = Math.max(list.get(list.size()-1).end, current.end);
      
           }  

        }

        return list;
    }
    
}
5.(较难)HJ68.成绩排序

在这里插入图片描述
在这里插入图片描述

	import java.util.*;
import java.util.stream.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            int number = Integer.parseInt(in.nextLine());
            String sort = in.nextLine();
            Student[] students = new Student[number];
            for (int i = 0; i < number; i++) {
                String line = in.nextLine();
                String[] split = line.split(" ");
                students[i] = new Student(split[0], Integer.parseInt(split[1]));
            }

            Arrays.sort(students, (o1, o2) -> {
                if (sort.equals("0")) {
                    return o2.score - o1.score;
                } else {
                    return o1.score - o2.score;
                }
            }
                       );
            for (Student student : students) {
                System.out.println(student.name + " " + student.score);
            }

        }
    }

    public static class Student {
        String name;
        int score;

        public Student(String name, int score) {
            this.name = name;
            this.score = score;
        }
    }
}

1. NC52.括号序列

在这里插入图片描述

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        Stack<Character> stack = new Stack<>();
        for(int i=0;i<s.length();i++){
            if(s.charAt(i) == '('){
                stack.push(')');
            }
            else if(s.charAt(i) == '['){
                stack.push(']');
            }
            else if(s.charAt(i) == '{'){
                stack.push('}');
            }
            else if(stack.isEmpty() || stack.pop() != (s.charAt(i))){
                return false;
            }
        }
        
        
        return stack.isEmpty();
    }
}
2. leetcode 1614.括号的最大嵌套深度

https://leetcode.cn/problems/maximum-nesting-depth-of-the-parentheses/
在这里插入图片描述

class Solution {
    public int maxDepth(String s) {
        int result = 0;
        int count = 0;
        Stack<Character> stack = new Stack<>();
        for(int i = 0 ; i < s.length();i++){
            if(s.charAt(i)=='('){
                result++;
                stack.push(')');
            }else if(s.charAt(i)==')'){
                stack.pop();
                count = count<result?result:count;
                result--;
            }
        }
        return count;
    }
}

改进:

class Solution {
    public int maxDepth(String s) {
        int result = 0;
        int count = 0;
        for(int i = 0 ; i < s.length();i++){
            if(s.charAt(i)=='('){
                result++;               
            }else if(s.charAt(i)==')'){  
                count = count<result?result:count;
                result--;
            }
        }
        return count;
    }
}

排列组合

1. 面试题 08.07. 无重复字符串的排列组合面试题 (回朔法-中等)

https://leetcode.cn/problems/permutation-i-lcci/description/
在这里插入图片描述

回朔算法 固定模版 直接套用

class Solution {
    public String[] permutation(String S) {
        boolean[] flag = new boolean[S.length()];
        List<String> res = new ArrayList<>();
        trackback(S,flag,new StringBuilder(),res);
        String[] strs = new String[res.size()];
        for(int i=0;i<res.size();i++){
            strs[i] = res.get(i);
        }
        return strs;

    }
    public void trackback(String S,boolean[] flag,StringBuilder stringBuilder, List<String> res){
        if(stringBuilder.length()==S.length()){
            res.add(stringBuilder.toString());
            return;
        }
        for(int i=0;i<S.length();i++){
            if(flag[i]==false){
                stringBuilder.append(S.charAt(i));
                flag[i]=true;
                trackback(S,flag,stringBuilder,res);
                stringBuilder.deleteCharAt(stringBuilder.length()-1);
                flag[i] = false;
            }
        }
    }
}


2. 面试题08.08.有重复字符串的排列组合(中等)

在这里插入图片描述

class Solution {
    int length = 0;
    public String[] permutation(String S) {
        char[] base = S.toCharArray();
        Arrays.sort(base);
        length = S.length();
        boolean[] flags = new boolean[S.length()];
        List<String> res = new ArrayList<>();
        trackBack(base,flags,new StringBuilder(),res);
        return res.toArray(new String[res.size()]);
    }
    public void trackBack(char[] base,boolean[] flags,StringBuilder stringBuilder,List<String> res){
        if(stringBuilder.length() == length){
            res.add(stringBuilder.toString());
            return;
        }
        for(int i =0;i<length;i++){
            if(flags[i]==true || (i>0 && base[i] == base[i-1]) && !flags[i-1]){
                continue;
            }
            stringBuilder.append(base[i]);
            flags[i] = true;
            trackBack(base,flags,stringBuilder,res);
            stringBuilder.deleteCharAt(stringBuilder.length()-1);
            flags[i] = false;
            
        }
    }
}
3. 77.组合(中等)

https://leetcode.cn/problems/combinations/description/
在这里插入图片描述

class Solution {
    List<List<Integer>> resultList = new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
        trackBack(n, k, new ArrayList<Integer>(), 1);
        return resultList;
    }
    public void trackBack(int n,int k, List<Integer> list, int index){
        if(list.size() == k){
            resultList.add(new ArrayList<>(list));
            return;
        }
         for (int i = index; i <= n; i++) {
                list.add(i);
                trackBack(n , k, list, i + 1);
                list.remove(list.size() - 1);
            }
    }
}

双指针

1.leetcode 674.最长连续递增序列

在这里插入图片描述

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int result = 1 ;
        int count = 1 ;
        for(int i=1;i<nums.length;i++){
            if (nums[i] > nums[i - 1]){
                count++;
            }else{
                result = Math.max( result , count);
                count = 1;
            }
        }
        return  Math.max( result , count);
    }
}
2. NC17.最长回文子串(动态规划 || 中心扩展 -中等)

动态规划的理解可以看here
在这里插入图片描述

  1. 动态规划

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param A string字符串
     * @return int整型
     */
    public int getLongestPalindrome (String A) {
        int max = 1;
        int length = A.length();

        boolean[][]  dp = new boolean[length][length];
        for(int i =0;i<length;i++){
            dp[i][i] = true;
        }
        for(int j=1;j<length;j++){
            for(int i=0;i<j;i++){
                if(A.charAt(i) != A.charAt(j)){
                    dp[i][j] = false;
                }else{
                     dp[i][j] = j-i<3||dp[i+1][j-1];
                }
                if(dp[i][j]){
                    max=Math.max(max,j-i+1);
                }
            }
        }
        return max;
    }
}
  1. 中心扩展
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param A string字符串
     * @return int整型
     */
    public int getLongestPalindrome (String A) {
        int max = 0;
        int lengthA = A.length();

        for (int i = 0; i < lengthA; ) {
            int begin = i;
            int end = i;
            while (end < lengthA - 1 && A.charAt(end) == A.charAt(end + 1)) {
                end++;
            }
            i = end + 1;
            while (begin > 0 && end < lengthA - 1 &&
                    A.charAt(begin - 1) == A.charAt(end + 1)) {
                begin--;
                end++;
            }
            max = Math.max(max, end - begin + 1);
        }

        return max;
    }
}

深搜

1. HJ41.称砝码

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = Integer.parseInt(in.nextLine());
        Set<Integer> set = new HashSet<Integer>();
        set.add(0);
        int[]  w = new int[n];
        int[] nums = new int[n];

        for(int i =0 ;i<n;i++){
            w[i] = in.nextInt();
        }
         for(int i =0 ;i<n;i++){
            nums[i] = in.nextInt();
        }
        
        for(int i = 0;i<n;i++){
            ArrayList<Integer> list = new ArrayList<>(set);
            for(int j = 1 ; j<=nums[i];j++){
                for(int k=0;k<list.size();k++){
                    set.add(list.get(k)+w[i]*j);
                }
                
            }
        }
        System.out.print(set.size());
    }
}

二叉树

1.(1) *leetcode 剑指offer 32 — II.从上到下打印二叉树 II

https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/description/
在这里插入图片描述

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> decorateRecord(TreeNode root) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        Queue<TreeNode> queue = new LinkedList<>();
        if(root!=null){
            queue.add(root);
        }
        while(!queue.isEmpty()){
            List<Integer> tmp = new ArrayList<>();
            for(int i=queue.size();i>0;i--){
                TreeNode node = queue.poll();
                tmp.add(node.val);
                if(node.left!=null){
                    queue.add(node.left);
                } 
                if(node.right!=null){
                    queue.add(node.right);
                }
                
            }
            list.add(tmp);
           
    }
     return list;
}}
2. leetcode 剑指offer 32 — III.从上到下打印二叉树 III

在这里插入图片描述

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> decorateRecord(TreeNode root) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        Queue<TreeNode> queue = new LinkedList<>();
        if(root!=null){
            queue.add(root);
        }
        while(!queue.isEmpty()){
            List<Integer> tmp = new LinkedList<>();
            for(int i=queue.size();i>0;i--){
                TreeNode node = queue.poll();

                if(list.size() % 2==0){
                    tmp.addLast(node.val);
                }else{
                    tmp.addFirst(node.val);
                }
                
                if(node.left!=null){
                    queue.add(node.left);
                } 
                if(node.right!=null){
                    queue.add(node.right);
                }
                
            }
            list.add(tmp);
           
    }
     return list;
}}

链表

1. HJ48从单向链表中删除指定值的节点

在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        List<Integer> list = new LinkedList<>();
        int length = in.nextInt();
        list.add(in.nextInt());   
        
        for (int i=0;i<length-1;i++){
            int value = in.nextInt();
            int target = in.nextInt();
            list.add(list.indexOf(target)+1,value);
        }
        int remove = in.nextInt();
        list.remove(list.indexOf(remove));
        for (Integer item : list){
            System.out.print(item+" ");
        }


    }
}

其它

1. 汽水瓶

在这里插入图片描述
在这里插入图片描述

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        List<Integer> resultList = new ArrayList<>();
        while(in.hasNextLine()){
            list.add(Integer.parseInt(in.nextLine()));
        }
        for(int i =0;i<list.size()-1;i++){
            resultList.add(count(list.get(i)));
        }
        for(Integer count : resultList){
            System.out.println(count);
        }
    }
    public static Integer count(Integer num){
        Integer base = 0;
        Integer other = 0;
        Integer result = 0;
        if(num < 2){
            return 0;
        }
        while(num>2){
            base = num/3;
            other = num%3 ;
            num = base+other;
            result += base;
        }
        if(num == 2){
            result += 1;
        }
        return result;
    }
}
  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月色夜雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值