中级农民
- 积分
- 155
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-4-17
- 最后登录
- 1970-1-1
|
写了下第一题,其实和word break 和palindrome partition基本一样
- public class LotteryTicket {
- public static void main(String[] args) {
- List<List<Integer>> res = getValidLotteryTickets("1223434567", 1, 59, 7);
- for (List<Integer> list : res) {
- for (int i : list) {
- System.out.print(i + " ");
- }
- System.out.println();
- }
- }
- public static List<List<Integer>> getValidLotteryTickets(String str,
- int min, int max, int num) {
- List<List<Integer>> res = new ArrayList<List<Integer>>();
- if (str == null || str.length() == 0) {
- return res;
- }
- helper(res, str, new ArrayList<Integer>(), min, max, 0, num);
- return res;
- }
- private static void helper(List<List<Integer>> res, String str,
- ArrayList<Integer> list, int min, int max, int pos, int num) {
- if (pos == str.length()) {
- if (list.size() == num) {
- res.add(new ArrayList<Integer>(list));
- }
- return;
- }
- for (int i = pos; i < str.length(); i++) {
- String part = str.substring(pos, i + 1);
- int val = Integer.valueOf(part);
- if (part.charAt(0) == '0' && part.length() > 1 || val > max) {
- break;
- }
- if (val >= min && val <= max) {
- list.add(val);
- helper(res, str, list, min, max, i + 1, num);
- list.remove(list.size() - 1);
- }
- }
- }
- }
复制代码 |
|