Java每日一练(20230421) 整数排列、数组排序、单词搜索

简介: Java每日一练(20230421) 整数排列、数组排序、单词搜索

1. 整数排列

十位数的所有排列,数字0不在首位,且没有重复的数字。

出处:

https://edu.csdn.net/practice/26142801

代码:

import java.util.*;
public class Solution {
   public static void main(String[] args) {
      String str[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
      permutation(str, 0, str.length);
   }
   static void swap(String[] str, int start, int end) {
      String tmep = str[start];
      str[start] = str[end];
      str[end] = tmep;
   }
   static void permutation(String[] str, int start, int end) {
      if (start == end - 1) {
         for (int i = 0; i < end; i++) {
            System.out.print(str[i]);
         }
         System.out.println();
      } else {
         for (int i = start; i < end; i++) {
            if (i == 0 && str[0].equals("0"))
               continue;
            swap(str, start, i);
            permutation(str, start + 1, end);
            swap(str, start, i);
         }
      }
   }
}

输出:

1023456789

1023456798

1023456879

1023456897

1023456987

1023456978

1023457689

1023457698

1023457869

1023457896

1023457986

1023457968

1023458769

1023458796

1023458679

1023458697

1023458967

1023458976

1023459786

1023459768

1023459876

1023459867

1023459687

1023459678

1023465789

1023465798

1023465879

1023465897

1023465987

1023465978

1023467589

1023467598

1023467859

1023467895

1023467985

1023467958

1023468759

1023468795

1023468579

1023468597

1023468957

1023468975

1023469785

1023469758

1023469875

1023469857

1023469587

1023469578

1023476589

1023476598

1023476859

1023476895

1023476985

1023476958

...... 略 (共计3265920个十位数)


2. 数组排序

将随机生成的无序数组使用冒泡排序。

出处:

https://edu.csdn.net/practice/26142802

代码:

class demo_sort {
    public static void main(String[] args) {
        int[] numbers = new int[] { 1, 5, 8, 2, 3, 9, 4 };
        for (int i = 0; i < numbers.length - 1; i++) {
            for (int j = 0; j < numbers.length - 1 - i; j++) {
                if (numbers[j] > numbers[j + 1]) {
                    int temp = numbers[j];
                    numbers[j] = numbers[j + 1];
                    numbers[j + 1] = temp;
                }
            }
        }
        System.out.println("从小到大排序后的结果是:");
        for (int i = 0; i < numbers.length; i++)
            System.out.print(numbers[i] + " ");
    }
}

输出:


3. 单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例 1:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"

输出:true


示例 2:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"

输出:true


示例 3:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"

输出:false


提示:

  • m == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • boardword 仅由大小写英文字母组成

进阶:你可以使用搜索剪枝的技术来优化解决方案,使其在 board 更大的情况下可以更快解决问题?

出处:

https://edu.csdn.net/practice/26142803

代码:

import java.util.*;
class exist {
    public static class Solution {
        public boolean exist(char[][] board, String word) {
            int cl = board.length;
            int rl = board[0].length;
            boolean[][] flag = new boolean[cl][rl];
            for (int i = 0; i < cl; i++) {
                for (int j = 0; j < rl; j++) {
                    if (find(board, word, flag, i, j, 0))
                        return true;
                }
            }
            return false;
        }
        public boolean find(char[][] board, String word, boolean[][] flag, int i, int j, int index) {
            int cl = board.length;
            int rl = board[0].length;
            if (word.length() == index)
                return true;
            if (i < 0 || i >= cl || j >= rl || j < 0)
                return false;
            if (flag[i][j] || word.charAt(index) != board[i][j])
                return false;
            flag[i][j] = true;
            boolean judge = find(board, word, flag, i - 1, j, index + 1) || find(board, word, flag, i + 1, j, index + 1) || find(board, word, flag, i, j - 1, index + 1) || find(board, word, flag, i, j + 1, index + 1);
            flag[i][j] = false;
            return judge;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        char[][] board = {{'A','B','C','E'},{'S','F','C','S'},{'A','D','E','E'}};
        String word = "ABCCED";
        System.out.println(s.exist(board, word));
        word = "SEE";
        System.out.println(s.exist(board, word));
        word = "ABCB";
        System.out.println(s.exist(board, word));
   }
}

输出:

true

true

false


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

🌟 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!  

主页:https://hannyang.blog.csdn.net/


目录
相关文章
|
5月前
|
Java
【java】poi 设置允许西文在单词中间换行
【java】poi 设置允许西文在单词中间换行
|
5月前
|
Java
CSDN每日一练(Java)--小艺的英文名
CSDN每日一练(Java)--小艺的英文名
|
1月前
|
Java
java基础(10)数据类型中的整数类型
Java中的整数类型包括byte、short、int和long。整数字面值默认为int类型,加L表示long类型。整数字面值可以是十进制、八进制(0开头)或十六进制(0x开头)。小容量类型(如int)可自动转换为大容量类型(如long),但大容量转小容量需强制转换,可能导致精度损失。
31 2
|
2月前
|
存储 自然语言处理 Java
|
2月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
50 0
|
4月前
|
Java 程序员
程序员必知:【java】判断字符串是否整数的三种方式,孰优孰劣请自行判断
程序员必知:【java】判断字符串是否整数的三种方式,孰优孰劣请自行判断
160 3
|
4月前
|
Java
剑指offer_1_整数除法(java)
剑指offer_1_整数除法(java)
|
5月前
|
安全 Java C++
2023-3-25 java选择题每日一练
2023-3-25 java选择题每日一练
42 1
|
4月前
|
算法 Java Go
【经典算法】LeetCode 58.最后一个单词的长度(Java/C/Python3/Go实现含注释说明,Easy)
【经典算法】LeetCode 58.最后一个单词的长度(Java/C/Python3/Go实现含注释说明,Easy)
31 0
|
4月前
|
存储 算法 Java
【经典算法】LeetCode 151. 反转字符串中的单词(Java/C/Python3实现含注释说明,中等)
【经典算法】LeetCode 151. 反转字符串中的单词(Java/C/Python3实现含注释说明,中等)
90 0