GetNumber的实现(Python & Java & Golang)
2014-08-25 23:50
211 查看
TCO2014的编程赢取门票的题目,大致是从一个数组(大小为K),可以选取1~K个数,必须保证这n个数是从1~n,返回所有的选取方法个数。
思路:首先是得到从1开始连续的数,保存每个数的个数。然后通过排列组合得到结果。
当时采用的Python编写,大致的模样是这样(题目要求的类名就略去了):
之后尝试了一下 Java 版本:
最近开始关注golang和swift,两种语言有很多共通之处。golang没有class,还是不免有些不适。
代码中主要是数组相关操作。相对而言,Python 最灵活。Golang 中采用 Slice 语法,与同为C系语言的Java颇为接近。
思路:首先是得到从1开始连续的数,保存每个数的个数。然后通过排列组合得到结果。
当时采用的Python编写,大致的模样是这样(题目要求的类名就略去了):
def getNumber(type): c = [0] * len(type) s = 0 p = 0 for x in type: if x <= len(type): c[x-1] += 1 for i in c: if i == 0: return s else: if s == 0: s = i p = i else: p *= i s += p return s print getNumber([2]) print getNumber([1, 2]) print getNumber([1, 3, 2]) print getNumber([1, 1, 2]) print getNumber([1, 3, 2, 5, 7, 4, 5, 4]) print getNumber([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
之后尝试了一下 Java 版本:
package org.huys.algo.problem; public class WinterAndCandies { public static int getNumber(int[] type) { int[] c = new int[type.length]; int s = 0; int p = 0; for (int i=0; i<type.length; i++) { if (type[i] <= type.length) { c[type[i]-1] += 1; } } for (int i=0; i<c.length; i++) { if (c[i] == 0) { return s; } else { if (s == 0) { s = c[i]; p = c[i]; } else { p *= c[i]; s += p; } } } return s; } public static void main(String[] args) { System.out.println(getNumber(new int[] {2})); System.out.println(getNumber(new int[] {1, 2})); System.out.println(getNumber(new int[] {1, 3, 2})); System.out.println(getNumber(new int[] {1, 1, 2})); System.out.println(getNumber(new int[] {1, 3, 2, 5, 7, 4, 5, 4})); System.out.println(getNumber(new int[] {1, 1, 2, 2, 3, 3, 4, 4, 5, 5})); } }
最近开始关注golang和swift,两种语言有很多共通之处。golang没有class,还是不免有些不适。
package main import "fmt" func getNumber(types []int) int { var s = 0 var p = 0 var c = make([]int, len(types)) for _, value := range types { if value <= len(types) { c[value-1] += 1 } } for _, i := range c { if i == 0 { return s } else { if s == 0 { s = i p = i } else { p *= i s += p } } } return s } func main() { fmt.Println(getNumber([]int {2})) fmt.Println(getNumber([]int {1, 2})) fmt.Println(getNumber([]int {1, 3, 2})) fmt.Println(getNumber([]int {1, 1, 2})) fmt.Println(getNumber([]int {1, 3, 2, 5, 7, 4, 5, 4})) fmt.Println(getNumber([]int {1, 1, 2, 2, 3, 3, 4, 4, 5, 5})) }
代码中主要是数组相关操作。相对而言,Python 最灵活。Golang 中采用 Slice 语法,与同为C系语言的Java颇为接近。
相关文章推荐
- 使用Thrift0.9.1实现跨语言调用Golang、Php、Python、Java
- C语言MD5加密算法的简单调用实现(另附:Java/Python/Shell/Golang方法)
- Python&Java实现支付宝第三方支付接入
- Java中的"goto"实现
- ·python·用生成器和迭代器实现自己的xrange
- java web 利用 commons-fileupload-1.2 实现文件上传 解决 中文乱码& 非文件属性的读取
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- python实现的“打砖块”游戏 Brick & Ball in Python
- DES&&RSA的JAVA实现终于在一个星期后出炉!(DES类)
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- 再谈将C++语言源码转成html的方法(vim实现,可用于java,perl,python等等多种语言)
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- ·python·用生成器和迭代器实现自己的xrange
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- java之旅 (四)隐藏实现 & 复用类
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- 从Python & Zope到Java with EJB 3 & JBoss SEAM
- ·python·用生成器和迭代器实现自己的xrange