美文网首页
泡LeetCode的日子-入门级Test

泡LeetCode的日子-入门级Test

作者: Killshadow | 来源:发表于2019-12-08 10:56 被阅读0次

    按照朋友的话来说, 入门级的难度会写for循环/ifelse判断即可.

    0x20 题目

    0x21 第一题

    题目

    题目的意思大概是: 给定一个长度为26的字符串buttons, 和一个匹配字符串word, 在长度为26的字符串buttons中搜索匹配字符串word的每个字符的间距, 一开始从buttons的第一个字符开始.

    思路

    比较暴力地搜索button中的所有在word当中的字符, 并且加一个oldIdx来保留上一个字符所在的位置, 用当前字符的idx索引减去上一字符的索引oldIdx得到当前字符与上一字符的距离. 以此类推.

    题解

    package com.killshadow.exam.primary;
    
    public class PrimaryFirst {
        public static void main(String[] args) {
            String buttons = "zyxwvutsrqponmlkjihgfedcba";
            String word = "xyz";
            System.out.println(new PrimaryFirst().testButtons(buttons, word));
        }
    
        /**
         * Calculate test Button length
         * @param buttons total button
         * @param word need to be match words
         * @return the length between words
         */
        public int testButtons(String buttons, String word) {
            char[] wordCh = word.toCharArray();
            char[] buttonCh = buttons.toCharArray();
            int ans = 0;
            int oldIdx = 0;
            for (int i = 0; i < wordCh.length; i++) {
                int idx = 0;
                while (true) {
                    if (wordCh[i] == buttonCh[idx]) {
                        ans += Math.abs(idx - oldIdx);
                        oldIdx = idx;
                        break;
                    } else {
                        idx++;
                        idx %= 26;
                    }
                }
            }
            return ans;
        }
    }
    

    0x22 第二题

    题目

    题意大概是: 给定一个MxN的二维数组matrixA, 计算该二维数组matrixA中所有元素左上角的元素和(包括该元素的值), 并存为当前元素的值.

    示例

    思路

    此题利用了动态规划的思路, 如果用暴力地话会超时. 设当前元素为A_(i,j), 则左边元素和上边元素的值分别为: 用当前元素的左边的值A_(i,j-1)+当前元素上边的值A_(i-1,j)-当前元素左上角的值A_(i-1,j-1)等于当前元素的值, 如下:

    思路

    题解

    package com.killshadow.exam.primary;
    
    import java.util.Arrays;
    
    public class PrimarySecond {
        public static void main(String[] args) {
            int[][] matrix = new int[][]{
                    {3, 7, 1}, {2, 4, 0}, {9, 4, 2}
            };
            int[][] ans = new PrimarySecond().calculate(matrix);
            for (int i = 0; i < matrix[0].length; i++) {
                System.out.println(Arrays.toString(ans[i]));
            }
        }
    
        /**
         * Calculate new matrix by matrixA
         * @param matrixA input matrix which need to be calculated
         * @return new matrix which has been calculate
         */
        public int[][] calculate(int[][] matrixA) {
            int colLen = matrixA[0].length;
            int rowLen = matrixA.length;
            int[][] ans = new int[rowLen][colLen];
            for (int i = 0; i < rowLen; i++) {
                for (int j = 0; j < colLen; j++) {
                    ans[i][j]+=matrixA[i][j];
                    if (i != 0) {
                        ans[i][j] += ans[i - 1][j];
                    }
                    if (j != 0) {
                        ans[i][j] += ans[i][j - 1];
                    }
                    if (i != 0 && j != 0) {
                        ans[i][j] += - ans[i - 1][j - 1];
                    }
                }
            }
            return ans;
        }
    }
    

    相关文章

      网友评论

          本文标题:泡LeetCode的日子-入门级Test

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