private static final int QUEEN_NUMBER = 8; // 皇后个数 private int[] columns = new int[QUEEN_NUMBER]; // 每个皇后存储的列 (row, col), row天然不相等 private int total = 0;
public int solution() { queen(0); return total; }
private void queen(int row) { if (row == QUEEN_NUMBER) { total++; } else { for (int col = 0; col != QUEEN_NUMBER; col++) { columns[row] = col; if (isPut(row)) { queen(row+1); } } } }
private boolean isPut(int row) { for (int i = 0; i != row; i++) { if (columns[row] == columns[i] || row - i == Math.abs(columns[row]-columns[i])) { return false; } } return true; }
老师留的题都很不错,正在刷之前没做过的LeetCode题。 参与下答对三题送课程的活动: Day 1: 1.求众数(Python) class Solution: def majorityElement(self, nums): return sorted(nums)[len(nums) // 2] 2.缺失的第一个正数(Golang) func firstMissingPositive(nums []int) int { if len(nums) == 0 { return 1 }
var arr = make([]bool, len(nums)+1) var idx = 1 for i := 0; i < len(nums); i++ { if nums[i] >= 0 && nums[i] < len(arr) { arr[nums[i]] = true } }
for i := 1; i < len(arr); i++ { if arr[i] == false { idx = i break } else { idx = i + 1 } }
return idx } Day 7: 3. 买卖股票的最佳时机(Python) class Solution: def maxProfit(self, prices): if not prices: return 0 min_price = prices[0] res = 0 for i in prices[1:]: min_price = min(min_price, i) if res < i - min_price: res = i - min_price return res
func maxProfit(prices []int) int { max := -1 for i := 0; i < len(prices); i++ { for j := i + 1; j < len(prices); j++ { profit := prices[j] - prices[i] if profit > 0 && profit > max { max = profit } } }
func coinChange(coins []int, amount int) int { var dp []int = make([]int, amount+1) for _, record := range coins { if amount >= record { dp[record] = 1 } }
for i := 1; i <= amount; i++ { dp[i] = amount + 1 for _, record := range coins { if i-record >= 0 { dp[i] = min(dp[i-record]+1, dp[i]) } } }
if dp[amount] > amount { return -1 }
return dp[amount] }
func min(a, b int) int { if a < b { return a } return b }
零钱兑换 go语言实现 func coinChange(coins []int, amount int) int { if amount==0{ return 0 } if len(coins)==0 && amount!=0{ return -1 }
isSmall:=true for _,coin:=range coins{ if coin<=amount{ isSmall=false } } if isSmall{ return -1 } grid:=make([]int,amount+1)
for _,coin:=range coins{ if coin<=amount{ grid[coin]=1 } if coin==amount{ return 1 } } for i:=2;i<amount+1;i++{ newGrid:=make([]int,amount+1) for j:=1;j<amount+1;j++{ for _,coin:=range coins{ if grid[j]==1 && j+coin<=amount{ newGrid[j]=1 newGrid[j+coin]=1 } } } grid=newGrid if grid[amount]==1{ return i } } return -1 }
func minPathSum(grid [][]int) int { l:=len(grid) w:=len(grid[0]) sum:=make([][]int,l) for i:=0;i<l;i++{ sum[i]=make([]int,w) } sum[0][0]=grid[0][0] for i:=1;i<w;i++{ sum[0][i]=grid[0][i]+sum[0][i-1] } for j:=1;j<l;j++{ sum[j][0]=grid[j][0]+sum[j-1][0] } for i:=1;i<l;i++{ for j:=1;j<w;j++{ sum[i][j]=less(sum[i-1][j],sum[i][j-1])+grid[i][j] } }
return sum[l-1][w-1] }
func less(i,j int) int{ if i>j{ return j }else{ return i } }