欢迎访问宙启技术站
智能推送

经典的Java函数实例

发布时间:2023-05-28 04:03:34

1. 阶乘函数

public static int factorial(int n) {

    if (n == 0) {

        return 1;

    } else {

        return n * factorial(n - 1);

    }

}

2. Fibonacci数列函数

public static int fibonacci(int n) {

    if (n == 0) {

        return 0;

    } else if (n == 1) {

        return 1;

    } else {

        return fibonacci(n - 1) + fibonacci(n - 2);

    }

}

3. 判断一个数是否为素数

public static boolean isPrime(int n) {

    if (n <= 1) {

        return false;

    }

    for (int i = 2; i <= Math.sqrt(n); i++) {

        if (n % i == 0) {

            return false;

        }

    }

    return true;

}

4. 链表反转

public static ListNode reverseList(ListNode head) {

    ListNode prev = null;

    ListNode curr = head;

    while (curr != null) {

        ListNode next = curr.next;

        curr.next = prev;

        prev = curr;

        curr = next;

    }

    return prev;

}

5. 逆波兰表达式求值

public static int evalRPN(String[] tokens) {

    Stack<Integer> stack = new Stack<>();

    for (String token : tokens) {

        if (token.equals("+")) {

            int b = stack.pop();

            int a = stack.pop();

            stack.push(a + b);

        } else if (token.equals("-")) {

            int b = stack.pop();

            int a = stack.pop();

            stack.push(a - b);

        } else if (token.equals("*")) {

            int b = stack.pop();

            int a = stack.pop();

            stack.push(a * b);

        } else if (token.equals("/")) {

            int b = stack.pop();

            int a = stack.pop();

            stack.push(a / b);

        } else {

            stack.push(Integer.parseInt(token));

        }

    }

    return stack.pop();

}

6. 二分查找

public static int binarySearch(int[] arr, int target) {

    int left = 0;

    int right = arr.length - 1;

    while (left <= right) {

        int mid = left + (right - left) / 2;

        if (arr[mid] == target) {

            return mid;

        } else if (arr[mid] < target) {

            left = mid + 1;

        } else {

            right = mid - 1;

        }

    }

    return -1;

}

7. 快速排序

public static void quickSort(int[] arr, int left, int right) {

    if (left < right) {

        int pivot = partition(arr, left, right);

        quickSort(arr, left, pivot - 1);

        quickSort(arr, pivot + 1, right);

    }

}

private static int partition(int[] arr, int left, int right) {

    int pivot = arr[right];

    int i = left;

    for (int j = left; j < right; j++) {

        if (arr[j] < pivot) {

            int temp = arr[i];

            arr[i] = arr[j];

            arr[j] = temp;

            i++;

        }

    }

    int temp = arr[i];

    arr[i] = arr[right];

    arr[right] = temp;

    return i;

8. 归并排序

public static void mergeSort(int[] arr, int left, int right) {

    if (left < right) {

        int mid = (left + right) / 2;

        mergeSort(arr, left, mid);

        mergeSort(arr, mid + 1, right);

        merge(arr, left, mid, right);

    }

}

private static void merge(int[] arr, int left, int mid, int right) {

    int[] temp = new int[right - left + 1];

    int i = left;

    int j = mid + 1;

    int k = 0;

    while (i <= mid && j <= right) {

        if (arr[i] <= arr[j]) {

            temp[k] = arr[i];

            i++;

        } else {

            temp[k] = arr[j];

            j++;

        }

        k++;

    }

    while (i <= mid) {

        temp[k] = arr[i];

        i++;

        k++;

    }

    while (j <= right) {

        temp[k] = arr[j];

        j++;

        k++;

    }

    for (int p = 0; p < temp.length; p++) {

        arr[left + p] = temp[p];

    }

}

9. 矩阵乘法

public static int[][] matrixMultiply(int[][] A, int[][] B) {

    int m = A.length;

    int n = B[0].length;

    int[][] C = new int[m][n];

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            for (int k = 0; k < B.length; k++) {

                C[i][j] += A[i][k] * B[k][j];

            }

        }

    }

    return C;

}

10. 计算两个字符串的编辑距离

public static int minDistance(String word1, String word2) {

    int m = word1.length();

    int n = word2.length();

    int[][] dp = new int[m + 1][n + 1];

    for (int i = 1; i <= m; i++) {

        dp[i][0] = i;

    }

    for (int j = 1; j <= n; j++) {

        dp[0][j] = j;

    }

    for (int i = 1; i <= m; i++) {

        for (int j = 1; j <= n; j++) {

            if (word1.charAt(i - 1) == word2.charAt(j - 1)) {

                dp[i][j] = dp[i - 1][j - 1];

            } else {

                dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1;

            }

        }

    }

    return dp[m][n];

}