您的位置:首页 > 其它

枚举思想

2015-08-19 09:32 585 查看
今天分享一下枚举思想,这种思想也常是码畜,码奴常用的手段,经常遭到码农以上级别的鄙视,枚举思想可以说是在被逼无奈时最后的狂吼。



一: 思想

有时我们解决某个问题时找不到一点规律,此时我们很迷茫,很痛苦,很蛋疼,突然我们灵光一现,发现候选答案的问题规模在百万之内,

此时我们就想到了从候选答案中逐一比较,一直找到正确解为止。



二: 条件

前面也说了,枚举是我们在无奈之后的最后一击,那么使用枚举时我们应该尽量遵守下面的两个条件。

① 地球人都不能给我找出此问题的潜在规律。

② 候选答案的集合是一个计算机必须能够承受的。



三:举例

下面是一个填写数字的模板,其中每个字都代表数字中的”0~9“,那么要求我们输入的数字能够满足此模板。



思路:首先拿到这个题,蛋还是比较疼的,因为找不到好的解题思路,仔细想想这属于查找类型的问题,常用的查找也就5种,能适合

该问题的查找也就”顺序查找“和”二分查找“,然后仔细看看问题规模最多也就105=100000,其实根据“二分"的思想在这个问题

中并不合适,最后只能用“顺序查找“了。

上代码:

[java] view
plaincopyprint?

package com.bankht.suanfa.meiju;



import org.junit.Test;



/**

* @author zhuyong

* @创建时间:2012-6-14 下午02:57:07

*

* @类说明 :枚举算法思想测试程序

*/

public class Meiju {



private String father = null;

private String mother = null;

private String son = null;



@Test

public void testMeiju() {

int[] a = { 111111, 222222, 333333, 444444, 555555, 666666, 777777, 888888, 999999 };

int[] b = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

for (int i = 0; i < a.length; i++) {

for (int j = 0; j < b.length; j++) {

father = a[i] / b[j] + "";

mother = b[j] + "";

son = a[i] + "";

if ((father.charAt(0) == mother.charAt(0)) && (father.charAt(4) == son.charAt(0)) && (father.length() == 5)) {

System.out.println(" " + father);

System.out.println("X " + mother);

System.out.println("-------");

System.out.println(son);

System.out.println();

System.out.println("费了:" + ((i + 1 - 1) * 9 + (j + 1)) + "次,TMD终于找出来了!");

}

}

}



}

}



运行结果:

[html] view
plaincopyprint?

79365

X 7

-------

555555



费了:43次,TMD终于找出来了!

____________________________________________________________________________________________________________________



最后我们还是解决了问题,发现其中的时间复杂度达到了O(n2),这个复杂度理论上还是能接受的,还好我们的n在10以内,

n的每一次的自增对cpu来说都是莫大的伤害。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: