C/C++教程

LeetCode刷题记---2000/1414/1725

本文主要是介绍LeetCode刷题记---2000/1414/1725,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

(该模块仅为记录本人的leetcode的练习记录)

文章目录

    • 2000.反转单词前缀(easy)
    • 1414.和为K的最少斐波那契数字数目(medium)
    • 1725.可以形成最大正方形的矩形数目(easy)

2000.反转单词前缀(easy)

在这里插入图片描述
解题思路:先找到匹配的字符位置,若是不存在则直接返回源字符串,反正反转前部分。

代码:

package LeetCode.Code2022.February;

public class Solution2000 {
   public String reversePrefix(String word, char ch) {
       int index = -1;
       index = word.indexOf(ch);
       if (index == -1) {
           return word;
       }
       return new StringBuilder(word.substring(0, index + 1)).reverse() + word.substring(index + 1);
   }
}

1414.和为K的最少斐波那契数字数目(medium)

在这里插入图片描述
解题思路:先得到所有小于k的斐波那契额数集,存放在list中,然后每次从list中获取最大的数与K进行比较,若该数小于等于K则将该数视为解集之一,然后将K减去该数,反之获取第二大的数进行比较,重复上述步骤。

代码:

package LeetCode.Code2022.February;

import java.util.ArrayList;
import java.util.List;

public class Solution1414 {
    public int findMinFibonacciNumbers(int k) {

        List<Integer> list = fibonacci(k);
        int ans = 0;
        int index = list.size() - 1;
        while (k > 0) {
            if (list.get(index) <= k) {
                k -= list.get(index);
                ans++;
            } else {
                index = index > 0 ? index - 1 : 0;
            }

        }
        return ans;

    }
    List<Integer> fibonacci(int k) {
        List<Integer> hashSet = new ArrayList<>();
        int f1 = 1;
        int f2 = 1;
        int fn = 0;
        hashSet.add(1);
        while (fn <= k) {
            fn = f1 + f2;
            f1 = f2;
            f2 = fn;
            hashSet.add(fn);
        }
        return hashSet;
    }

}

1725.可以形成最大正方形的矩形数目(easy)

在这里插入图片描述

解题思路:先遍历一遍记录可形成的最大正方形边长,然后在遍历一遍可以形成最大正方形边长的数目

代码:

package LeetCode.Code2022.February;

public class Solution1725 {
    public int countGoodRectangles(int[][] rectangles) {
        
        int maxLen = 0;
        for (int i = 0; i < rectangles.length; i++) {
            int len = Math.min(rectangles[i][0], rectangles[i][1]);
            if (maxLen < len) {
                maxLen = len;
            }
        }
        int ans = 0;
        for (int i = 0; i < rectangles.length; i++) {
            int len = Math.min(rectangles[i][0], rectangles[i][1]);
            if (len == maxLen) {
                ans++;
            }
        }
        return ans;

    }
}

这篇关于LeetCode刷题记---2000/1414/1725的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!