Leetcode9月5号打卡

1,003 阅读1分钟

题目描述

一个环上有10个点,编号为0-9,从0点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过n步又回到0点有多少种不同的走法?

举例
如果n=1,则从0出发只能到1或者9,不可能回到0,共0种走法
如果n=2,则从0出发有4条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0,其中有两条回到了0点,故一共有2种走法

和剑指offer上那个机器人走路有点像,感觉好久没刷动态规划的题了

public class Solution {
    public int GetSteps(int n,int k){
        if(n == 1){
           return 0; 
        }
        if(n == 2){
            if(k % 2 == 0){
                return 1;
            }
            return 0;
        }
        //dp[i][j] 代表到达i这个点,走j步的情况数
        int[][] dp = new int[n][k + 1];
        dp[0][0] = 1;
        for(int j = 1;j <= k;j++){
            for(int i = 0;i < n;i++){
                dp[i][j] = dp[(i - 1 + n) % n][j - 1] + dp[(i + 1) % n][j - 1];

            }
        }
        return dp[0][k];
    }
}

2.已知一个三角形的三个顶点,判断一个点是否在三角形中?

public final class Demo {

	public static boolean isInTriangle(POINT A, POINT B, POINT C, POINT P) {
		double ABC = triAngleArea(A, B, C);
		double ABp = triAngleArea(A, B, P);
		double ACp = triAngleArea(A, C, P);
		double BCp = triAngleArea(B, C, P);
		if (ABC == ABp + ACp + BCp) {// 若面积之和等于原三角形面积,证明点在三角形内
			return true;
		} else {
			return false;
		}
	}

	private static double triAngleArea(POINT A, POINT B, POINT C) {// 由三个点计算这三个点组成三角形面积
		double result = Math.abs((A.x * B.y + B.x * C.y + C.x * A.y - B.x * A.y - C.x * B.y - A.x * C.y) / 2.0D);
		return result;
	}
}