>  기사  >  Java  >  LeetCode Day동적 프로그래밍 5부

LeetCode Day동적 프로그래밍 5부

WBOY
WBOY원래의
2024-07-16 12:01:49724검색

LeetCode DayDynamic Programming Part 5

518. 코인 체인지 II

다양한 액면가의 동전을 나타내는 정수 배열 동전과 총 금액을 나타내는 정수 금액이 제공됩니다.

해당 금액을 구성하는 조합의 수를 반환합니다. 해당 금액을 코인 조합으로 채울 수 없는 경우 0을 반환합니다.

각 코인의 수는 무한하다고 가정할 수 있습니다.

답은 부호 있는 32비트 정수에 맞도록 보장됩니다.

예 1:

입력: 수량 = 5, 코인 = [1,2,5]
출력: 4
설명: 금액을 보충하는 방법에는 네 가지가 있습니다:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
예시 2:

입력: 수량 = 3, 코인 = [2]
출력: 0
설명: 2개의 동전만으로는 3개의 금액을 만들 수 없습니다.
예시 3:

입력: 금액 = 10, 코인 = [10]
출력: 1

제약사항:

1 <= 동전.길이 <= 300
1 코인의 모든 가치는 고유합니다.
0 원본페이지

    public int change(int amount, int[] coins) {
        int[][] dp = new int[coins.length+1][amount+1];
        for(int i=0; i<=coins.length; i++){
            dp[i][0] = 1;
        }
        for(int i=1; i<= coins.length; i++){
            for(int j=1; j<=amount; j++){
                if(j<coins[i-1]){
                    dp[i][j] = dp[i-1][j];
                }else{
                    dp[i][j] = dp[i-1][j] + dp[i][j-coins[i-1]];
                }

            }
        }
                    // Arrays.stream(dp).map(Arrays::toString).forEach(System.out::println);
        return dp[coins.length][amount];
    }
    public int change(int amount, int[] coins) {
        int[] dp = new int[amount+1];
        dp[0] = 1;
        for(int i=0; i< coins.length; i++){
            for(int j=coins[i]; j<=amount; j++){
                dp[j] = dp[j] + dp[j-coins[i]];
            }
            System.out.println(Arrays.toString(dp));
        }
        return dp[amount];
    }

377. 조합 합 IV

고유한 정수 배열 nums와 대상 정수 target이 주어지면 대상에 합산되는 가능한 조합의 수를 반환합니다.

답안이 32비트 정수에 맞도록 테스트 사례가 생성되었습니다.

예 1:

입력: 숫자 = [1,2,3], 대상 = 4
출력: 7
설명:
가능한 조합 방법은 다음과 같습니다:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
서로 다른 시퀀스는 서로 다른 조합으로 계산됩니다.
예시 2:

입력: 숫자 = [9], 대상 = 3
출력: 0

제약사항:

1 <= nums.length <= 200
1 숫자의 모든 요소는 고유합니다.
1

추가 작업: 주어진 배열에 음수가 허용되면 어떻게 되나요? 문제가 어떻게 바뀌나요? 음수를 허용하려면 질문에 어떤 제한을 추가해야 합니까?

    public int combinationSum4(int[] nums, int target) {
        int[] dp = new int[target+1];
        dp[0] = 1;
        for(int i=1; i<=target; i++){
            for(int j=0; j<nums.length; j++){
                if(nums[j] <= i){
                    dp[i] = dp[i] + dp[i-nums[j]];
                }
            }
            // System.out.println(Arrays.toString(dp));
        }
        return dp[target];
    }

위 내용은 LeetCode Day동적 프로그래밍 5부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.