牛客春招刷题训练营 3月13日 Java 提取不重复的整数 句子逆序 迷宫问题

#牛客春招刷题训练营# + https://www.nowcoder.com/discuss/726480854079250432

题目地址

https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1?channelPut=w25springcamp

https://www.nowcoder.com/practice/48b3cb4e3c694d9da5526e6255bb73c3?channelPut=w25springcamp

https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc?channelPut=w25springcamp

提取不重复的整数

开一个单独的 boolean 数组记录当前元素是否出现

如果已经出现过了

如果没有出现 输出 更新数组状态

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) {
            boolean arr[]=new boolean[10]; // 注意 while 处理多个 case
            String str=in.next();
            for(int i=str.length()-1;i>=0;i--){
                if(arr[str.charAt(i)-'0']==false){
                    System.out.print(str.charAt(i));
                    arr[str.charAt(i)-'0']=true;
                }    
            }
        }
    }
}

句子逆序

要注意 Java 读取一行字符串

String str=in.nextLine();

逆序输出数组即可

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { 
            // 注意 while 处理多个 case
            String str=in.nextLine();
            String[] arr=str.split(" ");
            for(int i=arr.length-1;i>=0;i--){
                System.out.print(arr[i]+" ");
            }
        }
    }
}

迷宫问题

递归 DFS 记忆化搜索

四个方向

辅助数组 visited

如果访问过了 就无需再访问

注意要回溯状态

到达终点后回溯状态

每一次递归结束后回溯状态

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static List<int[]> list;
    static int n;
    static int m;
    static int arr[][];
    static boolean visited[][];
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) {
            ArrayList<int[]>ansList=new ArrayList<>();
            n=in.nextInt();
            m=in.nextInt();
            arr=new int[n][m];
            visited=new boolean[n][m];
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++){
                    arr[i][j]=in.nextInt();
                }
            }
            dfs(0,0,ansList);
            for(int arr[]:list){
                System.out.print("("+arr[0]+","+arr[1]+")");
                System.out.println("");
            }
        }
    }
    // 当前横坐标 当前纵坐标 存点
    private static void dfs(int i,int j,ArrayList<int []>anslist){
        // 递归出口
        if(i<0||j<0||i>n-1||j>m-1||arr[i][j]==1||visited[i][j]==true){
            return;
        }
        anslist.add(new int[]{i,j});
        visited[i][j]=true;
        if(i==n-1&&j==m-1){
            list=new ArrayList<>(anslist);
            visited[i][j]=false;
            anslist.remove(anslist.size()-1);
            return;
        }
        // 递归函数
        dfs(i+1,j,anslist);
        dfs(i,j+1,anslist);
        dfs(i-1,j,anslist);
        dfs(i,j-1,anslist);
        visited[i][j]=false;
        anslist.remove(anslist.size()-1);
    }
}
#牛客春招刷题训练营##牛客创作赏金赛#
牛客算法 校招 Java 合集 文章被收录于专栏

Java写算法

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务