精华内容
下载资源
问答
  • 字典序排序

    千次阅读 2019-01-30 16:41:01
    主要是关于LeetCode当中的字典序排序问题 386 Lexicographical Numbers 440 字典序的第K小数字 524 通过删除字母匹配到字典里面最长单词 361 去除重复字母使得剩下的字典排序最小的情况 386 字典序排序算法 Given ...

    主要是关于LeetCode当中的字典序排序问题

    • 386 Lexicographical Numbers
    • 440 字典序的第K小数字
    • 524 通过删除字母匹配到字典里面最长单词
    • 361 去除重复字母使得剩下的字典排序最小的情况

    386 字典序排序算法

    Given an integer n, return 1 - n in lexicographical order.

    For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].

    给 30
    1,10,11,12,13,14,15,16,17,18,19, 2,20,

    解决步骤

    1. 先争取*10,看是否满足
    2. 末尾小于9,不是9 (取余操作),满足++1操作
    3. 回退操作, 处理末尾为9 ,在这里面还要处理一个就是连续的末尾为9,比如 49999, 最终要处理成为49

    // 49999 49 这两种方式都要处理成为 5 , 只是对应的n 取值不是一样的基本情况

    Given an integer n, return 1 - n in lexicographical order.

    For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].

    非stack 方法

    public class Solution{
       public List<Integer> sloved(int n){
       List<Integer> result =new LinkedList<>();
            if(n==0) return result;
            int current =1;
            // 0````00 一共有n 位可以取值的基本情况
            for(int i=1;i<=n;i++){
                result.add(current);
                // 如果可以一直*到10000000000, 1位
                
                if(current*10<=n){
                //  在后面加一个10,, 比如1 ,n=10, 我们就可以10 
                    
                    // 1, 10 
                    current *=10;
                }
                //以数字9结尾的数字不能进行++操作,等基本概念
                // ++1 的边界条件
                else if (current+1<=n && current%10!=9) {
                    current++;
                }
                // 进行回退操作  比如 n=550, 现在是499 ,不能加1操作, 加1就是500 漏了5这些
                // 所以需要进行一个回退操作
                // 将499这样的数据进行回退, 449  转变成为5  499, 49  
                // 897  89 
                else{
                    // 处理连续的9999   比如 499999 最终进过while 循环变成49的基本情况
                    while((current/10)%10==9)
                    {
                        current /=10;
                    }
                    // while 循环只能把499 变换我49 ,最后我们还是需要最后一步进行处理
                    //将49转换为5
                    // 
                    current = current/10 +1;
                }
                
            }
            return result;
        }
       }
    }
    

    DFS

    class Solution {
        public List<Integer> lexicalOrder(int n) {
            List<Integer> result =new LinkedList<>();
            if(n==0) return result;
            // 所有的数字
            // 分别从1,2,3,4,5,6,7,8 9,这些数字开回溯
    //For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].
    
            for(int i=1;i<10;i++){
                dfs(n,i,result);
            }
            return result;
        }
        private void dfs(int n, int current, List<Integer> result){
            // 剪纸的基础条件情况
            if(current>n)
                return;
        
            result.add(current);
            current *=10;
            for(int i=0;i<10;i++){
                    // 进一步进行深度有效搜索
                   if(current+i>n)
                        return;
                  dfs(n,current+i,result);
                
            }
        }
        
    }
    
    展开全文
  • java的字典序排序

    万次阅读 2016-01-25 00:07:27
    java中的字典序排序

    利用java自带的方法实现字典序排序

     

    public static void main(String [] args){
    /*
    * 规则描述
    *1. 将token、timestamp、nonce三个参数进行字典序排序
    *2. 将三个参数字符串拼接成一个字符串进行sha1加密
    *3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 
    */

    String signature="0f829ac4e6689efbd338abda4c090f90bab60725";
    String timestamp="1455868453";
    String nonce="1677866950";
    String token="weixin";

    ArrayList<String> list=new ArrayList<String>();
    list.add(nonce);
    list.add(timestamp);
    list.add(token);

    Collections.sort(list);


    System.out.println(DigestUtils.shaHex(list.get(0)+list.get(1)+list.get(2)));

    //微信返回的加密串
    String signature="0f829ac4e6689efbd338abda4c090f90bab60725";

    System.out.println(signature2);
    }

     

     

    控制台输出:

    0f829ac4e6689efbd338abda4c090f90bab60725
    0f829ac4e6689efbd338abda4c090f90bab60725

     

    当然,或许你遇到了需要使用字段名+字段值的字典序排序,没关系,用下面的方法

    java中对map的字典序排序

    展开全文
  • 本文实例讲述了java实现对map的字典序排序操作。分享给大家供大家参考,具体如下:java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&...

    本文实例讲述了java实现对map的字典序排序操作。分享给大家供大家参考,具体如下:

    java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN,搜索关键字“附录1-JS-SDK使用权限签名算法”

    import java.util.ArrayList;

    import java.util.Collection;

    import java.util.Collections;

    import java.util.HashMap;

    import java.util.List;

    import org.apache.commons.codec.digest.DigestUtils;

    import com.opensymphony.xwork2.ActionSupport;

    public class Test extends ActionSupport {

    //测试页面

    public String test(){

    return SUCCESS;

    }

    public static void main(String [] args){

    String jsapi_ticket="kgt8ON7yVITDhtdwci0qef4Fd1u2d2iWwTE-nt2tSR7Me3FmWAhtxJa3QQCiMdLper4cUrqpDxkDJ6ljLgc7PA";

    int timestamp=1460637652;

    String nonceStr="C1WNnEpCwq4wa158";

    String url="http://qq.test.com/test/index.html";

    //字典序排序

    HashMap map=new HashMap();

    map.put("jsapi_ticket", jsapi_ticket);

    map.put("timestamp", timestamp+"");

    map.put("nonceStr", nonceStr);

    map.put("url", url);

    Collection keyset= map.keySet();

    List list=new ArrayList(keyset);

    Collections.sort(list);

    //这种打印出的字符串顺序和微信官网提供的字典序顺序是一致的

    for(int i=0;i

    System.out.println(list.get(i)+"="+map.get(list.get(i)));

    }

    //微信官网写的按照字典序排序后的字符串

    String sign="jsapi_ticket="+jsapi_ticket+"&noncestr="+nonceStr+"×tamp="+timestamp+"&url="+url;

    //System.out.println(DigestUtils.shaHex("jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value"));

    //微信返回的加密串

    String signature=DigestUtils.shaHex(sign);//sha1加密

    System.out.println(signature);

    }

    }

    PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

    希望本文所述对大家java程序设计有所帮助。

    展开全文
  • C++ 如何实现字典序排序法,自然排序类似PHP的natcasesort函数,整了一天没有头绪.数组是vector排序前:[0]=>IMG0.png[1]=>IMG3.png[2]=>img1.png[3]=>img10.png[4]=>img12.png[5]=>img2.png排序后:...

    C++ 如何实现字典序排序法,自然排序

    类似PHP的natcasesort函数,整了一天没有头绪.

    数组是vector

    排序前:

    [0] => IMG0.png

    [1] => IMG3.png

    [2] => img1.png

    [3] => img10.png

    [4] => img12.png

    [5] => img2.png

    排序后:

    [0] => IMG0.png

    [1] => img1.png

    [2] => img2.png

    [3] => IMG3.png

    [4] => img10.png

    [5] => img12.png

    ------解决方案--------------------

    其实楼主的意思就是按数字大小排序呗? 预处理的时候把数值部分摘出来作为排序的key。

    ------解决方案--------------------

    定位到数字部分,读取数字再比较?

    bool compare(const string& name1, const string& name2)

    {

    int num1, num2;

    sscanf(name1.c_str()+3, "%d", &num1);

    sscanf(name2.c_str()+3, "%d", &num2);

    return num1 

    }

    ------解决方案--------------------

    sort(vector.begin(),vector.end(),[](const string&a,const string&b){return a[3]<b[3];});泛型算法和lambda

    ------解决方案--------------------

    直接添加到容器,自动排序

    ------解决方案--------------------

    引用:Quote: 引用:定位到数字部分,读取数字再比较?

    bool compare(const string& name1, const string& name2)

    {

    int num1, num2;

    sscanf(name1.c_str()+3, "%d", &num1);

    sscanf(name2.c_str()+3, "%d", &num2);

    return num1 

    }

    这样就有点局域性了,不能确定后面一定是数字

    那你倒是说说具体的规则啊,对于你举的例子,以上那个比较规则应该是够了

    ------解决方案--------------------

    std::sort(files.begin(),files.end(), [](const std::string& a, const std::string& b)

    {

    return a.substr(3,std::string::npos)

    });

    ------解决方案--------------------

    简单的写了下 用的是qsort

    #include 

    #include 

    #include 

    char data[6][10]={{"img0"},

    {"img3"},

    {"img1"},

    {"img10"},

    {"img12"},

    {"img2"}};

    int cmp(const void *a, const void *b)

    {

    char *temp_a = (char *)a;

    char *temp_b = (char *)b;

    // 如果两个字符串的长度不相等那么就把少的放前面

    if(strlen(temp_a)!= strlen(temp_b))

    return strlen(temp_a)-strlen(temp_b);

    // 两字符串相等,就升序

    for(int i=0; i 

    {

    if(temp_a[i]!=temp_b[i])

    return temp_a[i]-temp_b[i];

    }

    }

    int main()

    {

    printf("排序前:\n");

    for(int i=0; i 

    printf("%s\n", data[i]);

    qsort(data, 6, 10*sizeof(char), cmp);

    printf("排序后:\n");

    for(int i=0; i 

    printf("%s\n", data[i]);

    return 0;

    }

    ------解决方案--------------------

    1702411991.png

    ------解决方案--------------------

    1702411992.png

    展开全文
  • 主要介绍了java实现对map的字典序排序操作,结合实例形式分析了java参照微信官网算法实现的字典序排序操作相关实现技巧,需要的朋友可以参考下
  • 2、编一个程序,定义一个字符串数组,输入若干国家名称(所有名称全用大 写或者全用小写),设计一个算法按字典顺序将这些国家名称进行排序。 3、编写一个程序,实现......2、编一个程序,定义一个字符串数组,输入若干国家...
  • 字符串字典序排序软件,最简单的程序,可以用升序和降序两种方式输出。
  • 本文实例讲述了java实现对map的字典序排序操作。分享给大家供大家参考,具体如下:java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&...
  • /* * 运用Collections的sort()方法对其进行排序 sort()方法需要传 连个参数,一个是需要进行排序的Collection 另一个是一个Comparator */ Collections.sort(list, new SpellComparator()); for (int i = 0; i (); i...
  • 主要介绍了Java语言字典序排序算法解析及代码示例,具有一定借鉴价值,需要的朋友可以参考下
  • java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN,搜索关键字“附录1-JS-SDK使用权限签名算法”import java.util...
  • 编码字典序排序

    千次阅读 2018-11-21 17:49:37
    * 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序, * 形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, * yyyw, ...
  • 字典序排序-Java

    2020-10-07 12:09:48
    字典序排序求全排列 import java.util.Arrays; /** * @author 毛毛虫 * @create 2020-09-24 10:40 */ public class dictionaryOrder { void swap(int arr[],int a,int b){ int temp = 0; temp = arr[a]; ...
  • 本文实例讲述了java实现对map的字典序排序操作。分享给大家供大家参考,具体如下:java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&...
  • Leetcode 385.字典序排序

    千次阅读 2019-01-07 20:03:00
    字典序排序 给定一个整数n, 返回从1到n的字典顺序。 例如, 给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。 请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据n小于等于5,000,000。 解题...
  • 本文实例讲述了java实现对map的字典序排序操作。分享给大家供大家参考,具体如下:java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&...
  • 字典序排序算法解析

    千次阅读 2017-08-29 11:15:53
    字典序排序算法是一种对于随机序列生成全排列的排序方法。例如对于随机变量X={1,2,3},则生成的全排列为:{1,2,3}、{1,3,2}、{2,1,3}、{2,3,1}、{3,1,2}、{3,2,1}。 1.2字典序排序的求解步骤: (1)从右至左找出数组...
  • 字符字典序排序C++

    千次阅读 2018-05-31 15:31:39
    之前遇到字典序排序的问题,一时间没能想出来,之后想好后记录下来。 问题描述:给出一个字符串,是一个不是多个string,有大写有小写,排序结果为AaBbCcDd......之前一直不明白sort函数的自定义函数的工作原理,...
  • 最近在用不太熟悉的 java 写点项目,有个需求需要把以“.”分隔的路径按照每个子路径的字典序排序,例如:python:arr = ["a.b.c", "a.b", "a.ab", "c"]sorted(arr, key=lambda r: r.split("."))输出: ['a.ab', 'a.b'...
  • Java字符串数组字典序排序

    千次阅读 2020-08-24 01:38:24
    Java字典序排序1. String[] 字符串数组1) 正序排序2)逆序排序2. String 字符串3. int[] 整数数组 1. String[] 字符串数组 1) 正序排序 public String[] sortA(String[] strings){ Arrays.sort(strings, (o1,o2) -&...
  • 字符串按照字典序排序

    万次阅读 2016-05-17 12:33:31
    用sort()函数对字符串进行字典序排序   定义结构体存储字符串   struct node { char st[1000]; }a[100000];           定义排序规则 字典序   bool cmp(node s1,node s2) { return ...
  • 参数字典序排序2.对排序的字符串加密1⃣️md5加密2⃣️sha1加密 1.参数字典序排序 名词解释:字典序排序也就是字段按照英文字母表的顺序来排列 举个栗子 token、timestamp、nonce三个参数进行字典序排序 const ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,758
精华内容 2,303
关键字:

字典序排序