LeetCode Perfect Squares -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

    题目描述

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

    For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.

    Credits:

    Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

    思路:

    本题还是BFS, 递归的对象是完全平方数集合,以及要寻找的数集list[0...i](=n-table[0...i])

    1. 找出小于目标数:n的完全平方数,如果找到直接返回

    2. 进行BFS(完全平方数集合:table,要寻找的数集:list,层数:depth):

    循环table,针对每个小于当前n的完全平方数,求出它要寻找的数集:x={n-table[i]} , i∈[0,table.Count] => 得到list

    实现代码

   

public class Solution {    public int NumSquares(int n)     {       if(n == 1){		return 1;	}		var len = n/2;	var depth = 1;	var table = new List<int>();	for(var i = 1;i <= len; i++){		var x = i * i;		if(x == n){			return 1;		}		if(x < n){			table.Add(x);		}	}			var list = new List<int>();	for(var i = 0 ;i < table.Count; i++){		list.Add(n-table[i]);	}		Bfs(table, list, depth + 1);		return Depth;}private int Depth;private bool Found = false;public void Bfs(IList<int>table , IList<int>target , int depth){	if(Found){		return;	}		for(var i =0 ;i < table.Count; i++){		for(var j = 0;j < target.Count; j++){			if(table[i] == target[j]){				Depth = depth;				Found = true;				return;			}		}	}		var list = new List<int>();	for(var i = 0;i < target.Count; i++){		var t = table.Where(x=>x<target[i]).tolist(); j="0;j" pre="" var=""></p></target[i]).tolist();></int></int></int></int></int>

最新文章