377. Combination Sum IV 70. Climbing Stairs

back function (return number)

remember the structure

class Solution {
    int res = 0;
    //List<List<Integer>> resList = new ArrayList<List<Integer>>();
    public int combinationSum4(int[] nums, int target) {
        Arrays.sort(nums);
        return back(target, 0,nums,new HashMap<Integer,Integer>());
    }
    int back(int target, int sum, int[] nums, Map<Integer,Integer> map){
        if(sum == target){
            return 1;
        }else if(sum > target) return 0;
        if(map.containsKey(sum)) return map.get(sum);
        int count = 0;
        for(int i = 0; i<nums.length; i++){
            count+= back(target, sum+nums[i],nums,map);
        }
        map.put(sum,count);
        return count;
    }
}

Solution 2:

dp keywards: how many ways and optimal

class Solution {
    public int combinationSum4(int[] nums, int target) {
        int[] dp = new int[target+1]; // how many cases for each number
        Arrays.sort(nums);
        for(int num:nums){
            if(num>target) continue;
            dp[num] = 1;
        }
        for(int i = 1;i <=target; i++){

            for(int num : nums){
                if(i<num) continue;
                dp[i] += dp[i-num];
            }

        }
        return dp[target];
    }
}

70. Climbing Stairs

class Solution {
    //dp[n] = dp[n-1] + dp[n-2]
    //dp[1] : 1, dp[0] = 1 ,dp[2] = 2, dp[3] = 3
    public int climbStairs(int n) {
        int[] dp = new int[n+1];
        dp[0] = 1; dp[1] = 1;
        for(int i = 2; i<=n; i++){
            dp[i] = dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
}

原文地址:https://www.cnblogs.com/stiles/p/Leetcode377.html

时间: 2024-12-12 15:24:18

377. Combination Sum IV 70. Climbing Stairs的相关文章

LC 377. Combination Sum IV

Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target. Example: nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1,

377. Combination Sum IV

是看到discuss里面的解法,因为用backtracking实在太多可能性了 思路是和https://leetcode.com/problems/climbing-stairs/ 在climbing stairs里面假如有n个台阶,每次可以跨一个台阶或者两个台阶,那么它的状态转移方程是res[i] = res[i - 1] + res[i - 2],初始化是res[0] = 1; res[1] = 1; 但是在本题中,每次不再只是可以跨一步或者两步了,每次可以跨nums数组里面的任意数字的步,

Leetcode 377. Combination Sum IV

Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target. Example: nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1,

377. Combination Sum IV 返回符合目标和的组数

[抄题]: Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target. Example: nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2

377. Combination Sum IV (DP)

1 class Solution { 2 public int combinationSum4(int[] nums, int target) { 3 int[] res = new int[target + 1]; 4 res[0] = 1; 5 for(int i = 1; i <= target; i++) { 6 for(int j = 0; j < nums.length; j++) { 7 if(nums[j] <= i && res[i - nums[j]]

leetCode 70. Climbing Stairs | 动态规划

70. Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 思考: top steps 1 1 2 2 3 3 4 5 5 8 6 13 ... ... 从上面的分析可以看出,f(top)

刷题70. Climbing Stairs

一.题目说明 题目70. Climbing Stairs,爬台阶(楼梯),一次可以爬1.2个台阶,n层的台阶有几种爬法.难度是Easy! 二.我的解答 类似的题目做过,问题就变得非常简单.首先用递归方法计算: class Solution{ public: int climbStairs(int n){ if(n==1) return 1; if(n==2) return 2; return climbStairs(n-1) + climbStairs(n-2); } }; 非常不好意思,Tim

动态规划------Combination Sum IV

Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target. Example: nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1,

leetCode 70.Climbing Stairs (爬楼梯) 解题思路和方法

Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 思路:题目也比较简单,类似斐波那契. 代码如下: public class Solution { public int climbSta