题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3574cd7b8bae242ce29125eb25ed1226.png)
分析
- 暴力法。遍历所有长度为n的数,计算所有位数好之和为m的数的和
- 回溯法。相当于有n个位置,除了第一个位置外(第一个位置不能放置0),其余位置可以放置0-9中的任意一个数,找出其中所有位置上的数和为m的所有排列情况。
import java.util.*;
public class Solution {
public long num = 0;
public long sum (int n, int m) {
StringBuffer buffer = new StringBuffer();
helper(n,m,buffer,0,n);
return num;
}
public void helper(int n,int m,StringBuffer buffer,int begin,int end) {
if(begin > end) {
return;
}
if(begin == end) {
if(m == 0) {
int x = Integer.parseInt(buffer.toString());
num +=x;
}
return;
}
for(int i = 0; i < Math.min(10,m + 1); i++) {
if(begin == 0 && i == 0) {
continue;
} else {
buffer.append(i);
helper(n,m - i,buffer,begin + 1,end);
buffer.deleteCharAt(buffer.length()-1);
}
}
}
}